summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Kehrer <paul.l.kehrer@gmail.com>2022-08-24 11:19:45 +0800
committerGitHub <noreply@github.com>2022-08-23 23:19:45 -0400
commiteceb97975357fcc9eef3dabd01fa5f0737392164 (patch)
tree28688f202e97ba10a9b0aae872df5b4f81b3248d
parent7af3ff62d6290de80341ec57408b8af8125b9457 (diff)
downloadpy-bcrypt-git-eceb97975357fcc9eef3dabd01fa5f0737392164.tar.gz
better errors on compilation failure or rust setuptools import (#395)
* better errors on compilation failure or rust setuptools import * pep8
-rw-r--r--setup.py102
1 files changed, 86 insertions, 16 deletions
diff --git a/setup.py b/setup.py
index f5c6546..971e14e 100644
--- a/setup.py
+++ b/setup.py
@@ -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):
@@ -14,19 +31,72 @@ if platform.python_implementation() == "PyPy":
)
-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