1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
#!/usr/bin/env python
import platform
import re
import shutil
import subprocess
import sys
from setuptools import setup
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 bcrypt:
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):
raise RuntimeError(
"bcrypt is not compatible with PyPy < 2.6. Please upgrade PyPy to "
"use this library."
)
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",
),
],
)
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
|