Skip to content

Commit

Permalink
better errors on compilation failure or rust setuptools import (#395)
Browse files Browse the repository at this point in the history
* better errors on compilation failure or rust setuptools import

* pep8
  • Loading branch information
reaperhulk authored Aug 24, 2022
1 parent 7af3ff6 commit eceb979
Showing 1 changed file with 86 additions and 16 deletions.
102 changes: 86 additions & 16 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,27 @@
#!/usr/bin/env python
import platform
import re
import shutil
import subprocess
import sys

from setuptools import setup

from setuptools_rust import RustExtension
try:
from setuptools_rust import RustExtension
except ImportError:
print(
"""
=============================DEBUG ASSISTANCE==========================
If you are seeing an error here please try the following to
successfully install cryptography:
Upgrade to the latest pip and try again. This will fix errors for most
users. See: https://pip.pypa.io/en/stable/installing/#upgrading-pip
=============================DEBUG ASSISTANCE==========================
"""
)
raise

if platform.python_implementation() == "PyPy":
if sys.pypy_version_info < (2, 6):
Expand All @@ -14,19 +31,72 @@
)


setup(
rust_extensions=[
RustExtension(
"_bcrypt",
"src/_bcrypt/Cargo.toml",
py_limited_api=True,
# Enable abi3 mode if we're not using PyPy.
features=(
[]
if platform.python_implementation() == "PyPy"
else ["pyo3/abi3-py36"]
try:
setup(
rust_extensions=[
RustExtension(
"_bcrypt",
"src/_bcrypt/Cargo.toml",
py_limited_api=True,
# Enable abi3 mode if we're not using PyPy.
features=(
[]
if platform.python_implementation() == "PyPy"
else ["pyo3/abi3-py36"]
),
rust_version=">=1.56.0",
),
rust_version=">=1.56.0",
),
],
)
],
)
except: # noqa: E722
# Note: This is a bare exception that re-raises so that we don't interfere
# with anything the installation machinery might want to do. Because we
# print this for any exception this msg can appear (e.g. in verbose logs)
# even if there's no failure. For example, SetupRequirementsError is raised
# during PEP517 building and prints this text. setuptools raises SystemExit
# when compilation fails right now, but it's possible this isn't stable
# or a public API commitment so we'll remain ultra conservative.

import pkg_resources

print(
"""
=============================DEBUG ASSISTANCE=============================
If you are seeing a compilation error please try the following steps to
successfully install bcrypt:
1) Upgrade to the latest pip and try again. This will fix errors for most
users. See: https://pip.pypa.io/en/stable/installing/#upgrading-pip
2) Ensure you have a recent Rust toolchain installed. bcrypt requires
rustc >= 1.56.0.
"""
)
print(f" Python: {'.'.join(str(v) for v in sys.version_info[:3])}")
print(f" platform: {platform.platform()}")
for dist in ["pip", "setuptools", "setuptools_rust"]:
try:
version = pkg_resources.get_distribution(dist).version
except pkg_resources.DistributionNotFound:
version = "n/a"
print(f" {dist}: {version}")
version = "n/a"
if shutil.which("rustc") is not None:
try:
# If for any reason `rustc --version` fails, silently ignore it
rustc_output = subprocess.run(
["rustc", "--version"],
capture_output=True,
timeout=0.5,
encoding="utf8",
check=True,
).stdout
version = re.sub("^rustc ", "", rustc_output.strip())
except subprocess.SubprocessError:
pass
print(f" rustc: {version}")

print(
"""\
=============================DEBUG ASSISTANCE=============================
"""
)
raise

0 comments on commit eceb979

Please sign in to comment.