无法使用PIP和setup.py安装Python Cryptography软件包。
无法使用PIP和setup.py安装Python Cryptography软件包。
尝试通过pip install cryptography
或从官网下载该软件包并运行python setup.py
安装Python的加密包时,我遇到以下错误:
D:\Anaconda\Scripts\pip-script.py run on 02/27/14 16:13:17 Downloading/unpacking cryptography Getting page https://pypi.python.org/simple/cryptography/ URLs to search for versions for cryptography: * https://pypi.python.org/simple/cryptography/ Analyzing links from page https://pypi.python.org/simple/cryptography/ Skipping https://pypi.python.org/packages/cp26/c/cryptography/cryptography-0.2-cp26-none-win32.whl#md5=13e5c4b19520e7dc6f07c6502b3f74e2 (from https://pypi.python.org/simple/cryptography/) because it is not compatible with this Python Skipping https://pypi.python.org/packages/cp26/c/cryptography/cryptography-0.2.1-cp26-none-win32.whl#md5=00e733648ee5cdb9e58876238b1328f8 (from https://pypi.python.org/simple/cryptography/) because it is not compatible with this Python Skipping https://pypi.python.org/packages/cp27/c/cryptography/cryptography-0.2-cp27-none-win32.whl#md5=013ccafa6a5a3ea92c73f2c1c4879406 (from https://pypi.python.org/simple/cryptography/) because it is not compatible with this Python Skipping https://pypi.python.org/packages/cp27/c/cryptography/cryptography-0.2.1-cp27-none-win32.whl#md5=127d6a5dc687250721f892d55720a06c (from https://pypi.python.org/simple/cryptography/) because it is not compatible with this Python Skipping https://pypi.python.org/packages/cp32/c/cryptography/cryptography-0.2-cp32-none-win32.whl#md5=051424a36e91039807b72f112333ded3 (from https://pypi.python.org/simple/cryptography/) because it is not compatible with this Python Skipping https://pypi.python.org/packages/cp32/c/cryptography/cryptography-0.2.1-cp32-none-win32.whl#md5=53f6f57db8e952d64283baaa14cbde3d (from https://pypi.python.org/simple/cryptography/) because it is not compatible with this Python Skipping https://pypi.python.org/packages/cp33/c/cryptography/cryptography-0.2-cp33-none-win32.whl#md5=302812c1c1a035cf9ba3292f8dbf3f9e (from https://pypi.python.org/simple/cryptography/) because it is not compatible with this Python Skipping https://pypi.python.org/packages/cp33/c/cryptography/cryptography-0.2.1-cp33-none-win32.whl#md5=81acca90caf8a45f2ca73f3f9859fae4 (from https://pypi.python.org/simple/cryptography/) because it is not compatible with this Python Found link https://pypi.python.org/packages/source/c/cryptography/cryptography-0.1.tar.gz#md5=bdc1c5fe069deca7467b71a0cc538f17 (from https://pypi.python.org/simple/cryptography/), version: 0.1 Found link https://pypi.python.org/packages/source/c/cryptography/cryptography-0.2.1.tar.gz#md5=872fc04268dadc66a0305ae5ab1c123b (from https://pypi.python.org/simple/cryptography/), version: 0.2.1 Found link https://pypi.python.org/packages/source/c/cryptography/cryptography-0.2.tar.gz#md5=8a3d21e837a21e1b7634ee1f22b06bb6 (from https://pypi.python.org/simple/cryptography/), version: 0.2 Using version 0.2.1 (newest of versions: 0.2.1, 0.2, 0.1) Downloading from URL https://pypi.python.org/packages/source/c/cryptography/cryptography-0.2.1.tar.gz#md5=872fc04268dadc66a0305ae5ab1c123b (from https://pypi.python.org/simple/cryptography/) Running setup.py (path:c:\users\paco\appdata\local\temp\pip_build_Paco\cryptography\setup.py) egg_info for package cryptography In file included from c/_cffi_backend.c:7:0: c/misc_win32.h:225:23: error: two or more data types in declaration specifiers c/misc_win32.h:225:1: warning: useless type name in empty declaration [enabled by default] c/_cffi_backend.c: In function 'convert_array_from_object': c/_cffi_backend.c:1105:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1105:26: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c:1130:30: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1130:30: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c:1150:30: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1150:30: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function 'convert_struct_from_object': c/_cffi_backend.c:1183:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1183:26: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c:1196:30: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1196:30: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function 'cdata_repr': c/_cffi_backend.c:1583:13: warning: unknown conversion type character 'L' in format [-Wformat] c/_cffi_backend.c:1583:13: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c:1595:9: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1595:9: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function 'cdataowning_repr': c/_cffi_backend.c:1647:30: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1647:30: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function '_cdata_get_indexed_ptr': c/_cffi_backend.c:1820:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1820:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1820:26: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function '_cdata_getslicearg': c/_cffi_backend.c:1872:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1872:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1872:26: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function 'cdata_ass_slice': c/_cffi_backend.c:1951:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1951:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1951:26: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c:1969:30: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1969:30: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1969:30: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c:1983:22: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1983:22: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function 'cdata_call': c/_cffi_backend.c:2367:30: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:2367:30: warning: format '%s' expects argument of type 'char *', but argument 3 has type 'Py_ssize_t' [-Wformat] c/_cffi_backend.c:2367:30: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function 'cast_to_integer_or_char': c/_cffi_backend.c:2916:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:2916:26: warning: format '%s' expects argument of type 'char *', but argument 3 has type 'Py_ssize_t' [-Wformat] c/_cffi_backend.c:2916:26: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c:2928:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:2928:26: warning: format '%s' expects argument of type 'char *', but argument 3 has type 'Py_ssize_t' [-Wformat] c/_cffi_backend.c:2928:26: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function 'new_array_type': c/_cffi_backend.c:3480:9: warning: unknown conversion type character 'l' in format [-Wformat] c/_cffi_backend.c:3480:9: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function 'b_complete_struct_or_union': c/_cffi_backend.c:3878:22: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:3878:22: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:3878:22: warning: too many arguments for format [-Wformat-extra-args] Traceback (most recent call last): File "", line 17, in File "c:\users\paco\appdata\local\temp\pip_build_Paco\cryptography\setup.py", line 113, in "build": cffi_build, File "D:\Anaconda\lib\distutils\core.py", line 112, in setup _setup_distribution = dist = klass(attrs) File "build\bdist.win-amd64\egg\setuptools\dist.py", line 239, in __init__ File "build\bdist.win-amd64\egg\setuptools\dist.py", line 264, in fetch_build_eggs File "build\bdist.win-amd64\egg\pkg_resources.py", line 580, in resolve dist = best[req.key] = env.best_match(req, ws, installer) File "build\bdist.win-amd64\egg\pkg_resources.py", line 818, in best_match return self.obtain(req, installer) # try and download/install File "build\bdist.win-amd64\egg\pkg_resources.py", line 830, in obtain return installer(requirement) File "build\bdist.win-amd64\egg\setuptools\dist.py", line 314, in fetch_build_egg File "build\bdist.win-amd64\egg\setuptools\command\easy_install.py", line 593, in easy_install File "build\bdist.win-amd64\egg\setuptools\command\easy_install.py", line 623, in install_item File "build\bdist.win-amd64\egg\setuptools\command\easy_install.py", line 809, in install_eggs File "build\bdist.win-amd64\egg\setuptools\command\easy_install.py", line 1015, in build_and_install File "build\bdist.win-amd64\egg\setuptools\command\easy_install.py", line 1003, in run_setup distutils.errors.DistutilsError: Setup script exited with error: command 'gcc' failed with exit status 1 Complete output from command python setup.py egg_info: In file included from c/_cffi_backend.c:7:0: c/misc_win32.h:225:23: error: two or more data types in declaration specifiers c/misc_win32.h:225:1: warning: useless type name in empty declaration [enabled by default] c/_cffi_backend.c: In function 'convert_array_from_object': c/_cffi_backend.c:1105:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1105:26: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c:1130:30: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1130:30: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c:1150:30: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1150:30: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function 'convert_struct_from_object': c/_cffi_backend.c:1183:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1183:26: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c:1196:30: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1196:30: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function 'cdata_repr': c/_cffi_backend.c:1583:13: warning: unknown conversion type character 'L' in format [-Wformat] c/_cffi_backend.c:1583:13: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c:1595:9: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1595:9: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function 'cdataowning_repr': c/_cffi_backend.c:1647:30: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1647:30: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function '_cdata_get_indexed_ptr': c/_cffi_backend.c:1820:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1820:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1820:26: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function '_cdata_getslicearg': c/_cffi_backend.c:1872:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1872:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1872:26: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function 'cdata_ass_slice': c/_cffi_backend.c:1951:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1951:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1951:26: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c:1969:30: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1969:30: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1969:30: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c:1983:22: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:1983:22: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function 'cdata_call': c/_cffi_backend.c:2367:30: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:2367:30: warning: format '%s' expects argument of type 'char *', but argument 3 has type 'Py_ssize_t' [-Wformat] c/_cffi_backend.c:2367:30: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function 'cast_to_integer_or_char': c/_cffi_backend.c:2916:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:2916:26: warning: format '%s' expects argument of type 'char *', but argument 3 has type 'Py_ssize_t' [-Wformat] c/_cffi_backend.c:2916:26: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c:2928:26: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:2928:26: warning: format '%s' expects argument of type 'char *', but argument 3 has type 'Py_ssize_t' [-Wformat] c/_cffi_backend.c:2928:26: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function 'new_array_type': c/_cffi_backend.c:3480:9: warning: unknown conversion type character 'l' in format [-Wformat] c/_cffi_backend.c:3480:9: warning: too many arguments for format [-Wformat-extra-args] c/_cffi_backend.c: In function 'b_complete_struct_or_union': c/_cffi_backend.c:3878:22: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:3878:22: warning: unknown conversion type character 'z' in format [-Wformat] c/_cffi_backend.c:3878:22: warning: too many arguments for format [-Wformat-extra-args] Traceback (most recent call last): File "", line 17, in File "c:\users\paco\appdata\local\temp\pip_build_Paco\cryptography\setup.py", line 113, in "build": cffi_build, File "D:\Anaconda\lib\distutils\core.py", line 112, in setup _setup_distribution = dist = klass(attrs) File "build\bdist.win-amd64\egg\setuptools\dist.py", line 239, in __init__ File "build\bdist.win-amd64\egg\setuptools\dist.py", line 264, in fetch_build_eggs File "build\bdist.win-amd64\egg\pkg_resources.py", line 580, in resolve dist = best[req.key] = env.best_match(req, ws, installer) File "build\bdist.win-amd64\egg\pkg_resources.py", line 818, in best_match return self.obtain(req, installer) # try and download/install File "build\bdist.win-amd64\egg\pkg_resources.py", line 830, in obtain return installer(requirement) File "build\bdist.win-amd64\egg\setuptools\dist.py", line 314, in fetch_build_egg File "build\bdist.win-amd64\egg\setuptools\command\easy_install.py", line 593, in easy_install File "build\bdist.win-amd64\egg\setuptools\command\easy_install.py", line 623, in install_item File "build\bdist.win-amd64\egg\setuptools\command\easy_install.py", line 809, in install_eggs File "build\bdist.win-amd64\egg\setuptools\command\easy_install.py", line 1015, in build_and_install File "build\bdist.win-amd64\egg\setuptools\command\easy_install.py", line 1003, in run_setup distutils.errors.DistutilsError: Setup script exited with error: command 'gcc' failed with exit status 1 ---------------------------------------- Cleaning up... Removing temporary dir c:\users\paco\appdata\local\temp\pip_build_Paco... Command python setup.py egg_info failed with error code 1 in c:\users\paco\appdata\local\temp\pip_build_Paco\cryptography Exception information: Traceback (most recent call last): File "D:\Anaconda\lib\site-packages\pip-1.5.4-py2.7.egg\pip\basecommand.py", line 122, in main status = self.run(options, args) File "D:\Anaconda\lib\site-packages\pip-1.5.4-py2.7.egg\pip\commands\install.py", line 278, in run requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle) File "D:\Anaconda\lib\site-packages\pip-1.5.4-py2.7.egg\pip\req.py", line 1229, in prepare_files req_to_install.run_egg_info() File "D:\Anaconda\lib\site-packages\pip-1.5.4-py2.7.egg\pip\req.py", line 325, in run_egg_info command_desc='python setup.py egg_info') File "D:\Anaconda\lib\site-packages\pip-1.5.4-py2.7.egg\pip\util.py", line 697, in call_subprocess % (command_desc, proc.returncode, cwd)) InstallationError: Command python setup.py egg_info failed with error code 1 in c:\users\paco\appdata\local\temp\pip_build_Paco\cryptography
我发现了其他的egg_info错误帖子(这里和这里),但那里提供的解决方案无法解决我的问题。另外,我能够通过PIP安装其他软件包。
PIP版本1.5.4,setuptools版本2.2
这是加密学安装文档页面中所提供的信息的简化版本。请查阅该页面获取最新细节。
由于这个SO问题不断出现,我将在这里回复(我是pyca/cryptography的开发人员之一)。以下是在3个主要平台上可靠安装pyca/cryptography的方法。
请注意,在所有这些情况下,强烈建议您安装到虚拟环境中而不是全局包空间中。这不仅适用于cryptography,而是一般性建议,以保持您的Python安装的可靠性。操作系统提供的Python的全局包空间由系统拥有,在其中通过pip安装东西会让您麻烦不断。
Windows
升级到最新版pip,然后只需pip install cryptography
cryptography和cffi都作为静态链接的wheels提供。
macOS(OS X)
升级到最新版pip,然后只需pip install cryptography
cryptography和cffi都作为静态链接的wheels提供。这适用于pyenv Python、系统Python、homebrew Python等。只要您运行的是最新版pip,您甚至不需要编译器。
Linux
在基于glibc或musl的分布式环境中,对于x86/x86-64/aarch64的用户,如果您运行的是最新版pip(升级!),则无需编译器或头文件,因为你会自动获得一个预编译的wheel。因此,您首先应该尝试升级您的pip,并安装最新版本的cryptography,因为旧版本不支持新的wheel类型。
如果您不符合manylinux/musllinux兼容性或希望针对自己的OpenSSL进行编译,则需要执行以下操作:
您需要一个C编译器、一个Rust编译器、libffi及其开发头文件,以及openssl及其开发头文件。
Debian或Ubuntu衍生的分布式环境
apt-get install build-essential libssl-dev libffi-dev python-dev
,然后执行
pip install cryptography
Red Hat衍生分布式环境
yum install gcc openssl-devel libffi-devel python-devel
,然后执行
pip install cryptography
请注意,自版本3.4以来,cryptography现在需要在构建时使用Rust编译器(而不是运行时),因此您还需要Rust >= 1.41.0。检查您的分布式环境的rust或通过rustup安装它。
我有一个类似的问题,并发现我缺少一个依赖项(对我来说是libssl-dev)。根据https://cryptography.io/en/latest/installation/中的引用,请确保满足所有依赖项:
在Windows上
如果你在Windows上,你需要确保你安装了OpenSSL。已经有编译好的二进制文件可用。如果你的安装在一个不寻常的位置,请设置LIB和INCLUDE环境变量以包括对应的位置。例如:
C:\> \path\to\vcvarsall.bat x86_amd64 C:\> set LIB=C:\OpenSSL-1.0.1f-64bit\lib;%LIB% C:\> set INCLUDE=C:\OpenSSL-1.0.1f-64bit\include;%INCLUDE% C:\> pip install cryptography
在Linux上构建cryptography
cryptography在Linux上应该很容易构建,前提是你的系统上有C编译器、Python的头文件(如果你没有使用pypy)以及OpenSSL和libffi库的头文件。
对于Debian和Ubuntu,以下命令将确保安装所需的依赖项:
sudo apt-get install build-essential libssl-dev libffi-dev python-dev
对于Fedora和RHEL推导的,以下命令将确保安装所需的依赖项:
sudo yum install gcc libffi-devel python-devel OpenSSL-devel
现在,你应该能够像往常一样构建和安装cryptography了。
pip install cryptography