Không thể cài đặt gói Mã hóa Python với PIP và setup.py


256

Khi tôi cố gắng cài đặt gói Mật mã cho Python thông qua pip install cryptographyhoặc bằng cách tải xuống gói từ trang web của họ và chạy python setup.py, tôi gặp lỗi sau:


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 "<string>", line 17, in <module>
      File "c:\users\paco\appdata\local\temp\pip_build_Paco\cryptography\setup.py", line 113, in <module>
        "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 "<string>", line 17, in <module>

  File "c:\users\paco\appdata\local\temp\pip_build_Paco\cryptography\setup.py", line 113, in <module>

    "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

Tôi đã tìm thấy các bài viết lỗi egg_info khác ( ở đâyở đây ) nhưng các giải pháp được cung cấp sẽ không giải quyết được vấn đề của tôi. Ngoài ra, tôi có thể cài đặt các gói khác thông qua PIP.

PIP phiên bản 1.5.4 setuptools phiên bản 2.2


ĐIỂM CHO MỌI NGƯỜI - Mật mã học hiện đang vận chuyển các bánh xe dựng sẵn cho hầu hết các hệ điều hành, vì vậy một pip installmật mã sẽ hoạt động tốt.
Legorooj

Câu trả lời:


427

Tôi đã có một vấn đề tương tự, và thấy rằng tôi chỉ đơn giản là thiếu một phụ thuộc (libssl-dev, đối với tôi). Như được tham chiếu trong https://cryptography.io/en/latest/installation/ , đảm bảo rằng tất cả các phụ thuộc đều được đáp ứng:

Trên Windows

Nếu bạn đang dùng Windows, bạn cần chắc chắn rằng mình đã cài đặt OpenSSL. Có nhị phân tiền biên dịch có sẵn. Nếu cài đặt của bạn ở một vị trí bất thường, hãy đặt các biến môi trường LIB và INCLUDE để bao gồm các vị trí tương ứng. Ví dụ:

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

Xây dựng mật mã trên Linux

Mật mã sẽ xây dựng rất dễ dàng trên Linux miễn là bạn có trình biên dịch C, tiêu đề cho Python (nếu bạn không sử dụng pypy) và tiêu đề cho các thư viện OpenSSL và libffi có sẵn trên hệ thống của bạn.

Đối với Debian và Ubuntu , lệnh sau sẽ đảm bảo rằng các phụ thuộc cần thiết được cài đặt:

sudo apt-get install build-essential libssl-dev libffi-dev python-dev

Đối với các dẫn xuất Fedora và RHEL , lệnh sau sẽ đảm bảo rằng các phụ thuộc cần thiết được cài đặt:

sudo yum install gcc libffi-devel python-devel OpenSSL-devel

Bây giờ bạn có thể xây dựng và cài đặt mật mã với thông thường.

pip install cryptography

1
Cảm ơn, đã làm việc hoàn hảo! Có VS2010 tôi phải: SET VS90COMNTOOLS =% VS100COMNTOOLS% và thêm hậu tố "mt" vào tên lib
Maciek

//, tôi có thể xác nhận rằng điều này hoạt động trên máy CEntOS 6.3 với Python 3.3 có lỗi tương tự như đã đăng trong câu hỏi ban đầu.
Nathan Basan

4
Có vẻ như libffi-devgói đó là chìa khóa ở tất cả. Tôi không cần phải định cấu hình thêm gì nữa, nhưng tên gói đó không xuất hiện trong nhật ký lỗi: - / Cảm ơn bạn.
m3nda

6
Đừng quên thay thế python-devbằng python3-devnếu bạn đang sử dụng python3
duan

1
FWIW Tôi đang chạy Debian 9 và phải thực hiện cài đặt apt-get libssl1.0-dev trước khi tôi thoát khỏi lỗi trong quá trình mã hóa cài đặt pip
Mike Pennington

113

Đây là phiên bản thu gọn của thông tin được tìm thấy trên trang tài liệu cài đặt của mật mã . Tham khảo trang đó để biết chi tiết mới nhất.

Vì câu hỏi SO này liên tục xuất hiện nên tôi cũng sẽ trả lời ở đây (Tôi là một trong những nhà phát triển pyca / mật mã). Đây là những gì bạn cần để cài đặt pyca / mật mã đáng tin cậy trên 3 nền tảng chính.

Xin lưu ý trong tất cả những trường hợp này nó là rất khuyến khích mà bạn cài đặt vào một virtualenv và không vào không gian gói toàn cầu. Điều này không đặc trưng cho mật mã mà là lời khuyên chung chung để giữ cho bản cài đặt Python của bạn đáng tin cậy. Không gian gói toàn cầu trong hệ điều hành do Pythons cung cấp thuộc sở hữu của hệ thống và cài đặt mọi thứ thông qua pip vào đó đang yêu cầu sự cố.

các cửa sổ

Nâng cấp lên pip mới nhất (8.1.2 kể từ tháng 6 năm 2016) và chỉ pip install cryptography

mật mã và cffi đều được vận chuyển dưới dạng bánh xe liên kết tĩnh.

Hệ điều hành X

Nâng cấp lên pip mới nhất (8.1.2 kể từ tháng 6 năm 2016) và chỉ pip install cryptography

mật mã và cffi đều được vận chuyển dưới dạng bánh xe liên kết tĩnh. Điều này sẽ làm việc cho Python pyenv, Python hệ thống, Python homebrew, v.v ... Miễn là bạn đang sử dụng pip mới nhất, bạn thậm chí sẽ không cần trình biên dịch.

Linux

Kể từ phiên bản 2.0, mật mã có nhiều bánh xe. Điều này có nghĩa là người dùng có pip 8.1+ chạy trên bản phân phối dựa trên glibc (hầu hết mọi thứ trừ Alpine Linux) và trên x86 / x86-64 (xin lỗi người Raspberry Pi) không còn cần trình biên dịch hoặc tiêu đề vì bạn sẽ tự động nhận được bánh xe được biên dịch trước . Vì vậy, điều đầu tiên bạn nên thử là nâng cấp pip của bạn!

Nếu bạn không tương thích manylinux1 thì đây là những gì bạn cần làm:

Bạn sẽ cần một trình biên dịch C, libffi + các tiêu đề phát triển của nó và openssl + các tiêu đề phát triển của nó.

Các bản phân phối có nguồn gốc từ Debian hoặc Ubuntu

apt-get install build-essential libssl-dev libffi-dev python-dev theo dõi bởi

pip install cryptography

Phân phối có nguồn gốc Red Hat

yum install gcc openssl-devel libffi-devel python-devel theo dõi bởi

pip install cryptography


1
Tôi đã làm điều này, nhưng tôi vẫn nhận được lỗi này: "Thất bại trong việc xây dựng bánh xe cho mật mã" Tiếp theo là rất nhiều đầu ra (quá nhiều cho một nhận xét).
RolandiXor

4
Phản hồi MacOSX hoạt động như một cơ duyên trên MacOS Sierra 10.12. Tôi đã nâng cấp pip của mình lên phiên bản mới nhất tại thời điểm này, 9.0.1.
João Santos

3
Nâng cấp lên pip mới nhất (8.1.2 kể từ tháng 6 năm 2016) và chỉ cần cài đặt pip mã hóa hoạt động!
Timothy Dalton

Tôi đã phải cập nhật thủ công pipcái cũ của mình, sau đó giải pháp OSX hoạt động như một cơ duyên. ( pip 9.0.1, MacOS Sierra)
benjaminz

1
không hoạt động trên windows10 của tôi, nhận được lỗi xây dựng không thể mở bao gồm tệp: 'openssl / opensslv.h'
Totte Karlsson

43

Đối với những người chạy OS X, đây là những gì làm việc cho tôi:

brew install openssl
env ARCHFLAGS="-arch x86_64" LDFLAGS="-L/usr/local/opt/openssl/lib" CFLAGS="-I/usr/local/opt/openssl/include"
pip install cryptography

(Chạy 10,9 Mavericks)

Bạn cũng có thể muốn thử hợp nhất các cờ và lệnh pip theo sau cho mỗi nhận xét bên dưới:

brew install openssl
env ARCHFLAGS="-arch x86_64" LDFLAGS="-L/usr/local/opt/openssl/lib" CFLAGS="-I/usr/local/opt/openssl/include" pip install cryptography

1
CFLAGS="-I/usr/include" pip install cryptography từ reaperhulk làm việc cho tôi trên Mavericks.
jjr4826

Lệnh này trong câu trả lời là không chính xác: dòng thứ hai và thứ ba phải được hợp nhất (sử dụng dấu gạch chéo ngược). Sau đó, nó hoạt động hoàn hảo, chỉ cần thử nghiệm trên El Capitan. Nhận xét này ở trên cũng không đúng. Các cài đặt khác trong câu trả lời là cần thiết hoặc bạn sẽ nhận được khiếu nại sau này.
Christian Tismer

1
Như mọi khi @nathancahill HEhe
Nick Woodhams

1
Tôi đã phải sử dụng exportkhông env, nhưng nếu không hoạt động.
Richard

$ ARCHFLAGS="-arch x86_64" LDFLAGS="-L/usr/local/opt/openssl/lib" CFLAGS="-I/usr/local/opt/openssl/include" pip install cryptographylàm việc cho tôi macOS 10.12với Python3.7(trong một virtualenv) khi cần cryptographyđể cài đặt ansible.
jalanb

23

Điều này làm việc cho tôi ở El Capitan

brew install pkg-config libffi openssl
env LDFLAGS="-L$(brew --prefix openssl)/lib" CFLAGS="-I$(brew --prefix openssl)/include" pip install cryptography

Bạn cũng có thể kiểm tra chủ đề tại đây: https://github.com/pyca/cryptography/issues/2350


Đây là cái đầu tiên trên trang này (và nhiều, nhiều người khác ..) đã làm việc cho tôi trong Mojave 10.14.5, cảm ơn. Cũng như vậy, các biến môi trường chỉ hoạt động cho lệnh chứ không phải phiên như ở nơi khác.
Chris

23

Điều này đã giải quyết vấn đề cho tôi (Ubuntu 16.04):

sudo apt-get install build-essential libssl-dev libffi-dev python-dev python3-dev

và sau đó nó đã hoạt động như thế này:

pip install cryptography
pip install pyopenssl ndg-httpsclient pyasn1

14

Rõ ràng trên các phiên bản OSX gần đây, điều này có thể là do Apple vận chuyển phiên bản OpenSSL của riêng họ, không hoạt động với thư viện mật mã.

Các phiên bản gần đây của thư viện mật mã có các phụ thuộc riêng của chúng, nhưng để có được chúng, bạn sẽ cần nâng cấp pip, và có thể cả env ảo. Vì vậy, đối với tôi, giải pháp là:

pip install --upgrade --force-reinstall pip virtualenv

cài đặt lại virtualenv đã làm điều đó cho tôi, nó đang sử dụng một phiên bản cũ của pip mà vẫn không thành công, cảm ơn bạn!
Adri Văn Houdt

Vẫn thất bại cho tôi. OSX 10.11.3 El Capitan tại đây.
agondiken

14

Cách tôi giải quyết "Thất bại trong việc xây dựng thư mục xây dựng cho mật mã"
(Tôi đến đây từ google để tìm lỗi này.)

lưu ý : sử dụng virtualenv

TL; DR:

tập tin của tôi /etc/apt/sources.listkhông được cấu hình đúng cho debian 8 của tôi.

Giải thích:

Tôi muốn cài đặt paramiko. paramiko cần mật mã.

Tôi đã nhận được những lỗi sau: đầu tiên với pip install cryptography:

(...)
  ----------------------------------------
  Failed cleaning build dir for cryptography
Failed to build cryptography
(...)
    ----------------------------------------
Command "/home/myuser/pyenvs/testo/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-HXWKAO/cryptography/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-WjqY6V-record/install-record.txt --single-version-externally-managed --compile --install-headers /home/myuser/pyenvs/testo/include/site/python2.7/cryptography" failed with error code 1 in /tmp/pip-build-HXWKAO/cryptography/

và sau đó với sudo apt-get install build-essential:

Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 build-essential : Depends: libc6-dev but it is not going to be installed > or
                            libc-dev
                   Depends: gcc (>= 4:4.4.3) but it is not going to be installed
                   Depends: g++ (>= 4:4.4.3) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

(Không chính xác các lỗi giống như OP nhưng cuối cùng tôi cũng ở đây để giúp đỡ )

Giải quyết:

Sau khi kiểm tra gần như mọi lệnh từ mọi bài đăng, cuối cùng tôi sẽ truy
cập https://wiki.debian.org/SourceList
và sao chép dán cấu hình đầy đủ của tôi trong tệp/etc/apt/sources.list

sau đó:

sudo aptitude update

và sau đó

sudo apt-get install build-essential libssl-dev libffi-dev python-dev

và sau đó

pip install cryptography

thứ


Đã giải quyết vấn đề của tôi trên máy chủ Ubuntu 16.04. Cảm ơn
Altaf Hussain

14

Tôi đã thử nhiều giải pháp ở trên, nhưng chỉ sau khi cài đặt lib sau tôi mới có thể cài đặt cryptography:

sudo apt install libssl1.0

Tôi đang sử dụng Ubuntu 18.04, nhưng nó cũng sẽ hoạt động trên Ubuntu 18.10.


1
Mặc dù mã này có thể trả lời câu hỏi, việc cung cấp ngữ cảnh bổ sung về cách thức và / hoặc lý do giải quyết vấn đề sẽ cải thiện giá trị lâu dài của câu trả lời.
Nic3500

1
Điều này làm việc cho tôi. Tại sao nó hoạt động? Sự khác biệt giữa gói đó, cài đặt libssl1.0-dev và libssl-dev là gì?
Chris

2
Tôi không hiểu tại sao, nhưng chỉ điều này cũng giúp tôi
dyus

Làm việc cho tôi quá. Mặc dù pip vẫn gặp lỗi phân đoạn sau khi thông báo cài đặt thành công, nhưng tôi nghĩ đó chỉ là vấn đề của pip.
Rob Mosher


7

Câu trả lời của Nick Woodham không hoạt động trên OSX 10.11 El Capitan đối với tôi, nhưng điều này đã làm.

brew install openssl
CFLAGS="-I/usr/local/opt/openssl/include" pip install cryptography==0.8

Điều này gần nhất để làm việc cho tôi nhưng cũng thất bại .. El Capitan OSX 10.11.3 ở đây. không thành công với mã lỗi 1 in / private / var / thư mục / d9 / 75cfznt17cjc124j3stq3qc40000gn / T / pip-build-Q_JjdE / mật mã /
agondiken

Tôi đã phải sử dụng CFLAGS="-I/usr/local/opt/openssl/include" pip install cryptographyvà nó được cài đặt. Tôi đã phải thêm LDFLAGS="-L/usr/local/opt/openssl/lib"vào để tải thư viện. Nhận xét của Dean Christian Armada dường như làm điều tương tự nhưng sử dụng các biến được tạo ra thay vì mã hóa cứng.
spig

4

Nếu bạn đang sử dụng python3, bạn cần cài đặt python3-dev. Điều này đã khắc phục vấn đề của tôi sudo apt-get install python3-dev.



3

Tôi gặp vấn đề khi chạy sudo pip install cryptographyvì nó không tìm thấy ffi khi cố gắng biên dịch. (OSX - Yosemite)

Tôi đã giải quyết nó bằng cách tải libffi và thiết lập var env.

$ brew install pkg-config libffi
$ export PKG_CONFIG_PATH=/usr/local/Cellar/libffi/3.0.13/lib/pkgconfig/
$ pip install cryptography

Tôi đã gặp sự cố khi cài đặt bcrypt vì cffi không cài đặt được, nhưng điều này đã khắc phục nó cho cả cffi và bcrypt. Cảm ơn bạn!
radiantradon

Điều này đã không làm việc cho tôi trên El Capitan. Cũng lưu ý khoảng thời gian đi lạc ở cuối "mật mã cài đặt pip."
Shacker

@shacker Đừng có el capitan vì vậy không thể kiểm tra điều đó nhưng đã loại bỏ giai đoạn đi lạc nhờ.
ThinkBonobo

@shacker Kiểm tra câu trả lời của tôi bro để cài đặt El Capitan
Dean Christian Armada

3

Điều này hoạt động trên El Capitan với MacPorts:

$ sudo port install openssl
$ env LDFLAGS="-L/opt/local/lib" CFLAGS="-I/opt/local/include" pip install cryptography

3

Nếu bạn đang xây dựng phân phối gói python trong tệp .gitlab-ci.yml trong GitLab CI sử dụng trình chạy gitlab được triển khai trong máy AWS EC2

 - apk add --update alpine-sdk && \
 - apk add libffi-dev openssl-dev && \
 - apk --no-cache --update add build-base

1
Chúc mừng, đã làm việc tuyệt vời trong một container docker dựa trên núi cao!
Alex Szabó

2

Tôi nhận thấy poster ban đầu rõ ràng đang sử dụng cài đặt windows ... và những câu trả lời tốt nhất ở trên đều dành cho các HĐH khác ... vậy là xong. Điều này giả định rằng bạn đã cài đặt Python 2.7, phiên bản được hỗ trợ rộng rãi nhất (mặc dù cũ).

  1. Cài đặt " Trình biên dịch Visual C ++ cho Python "
  2. Mở cửa sổ nhắc lệnh quản trị
  3. Chạy lại cài đặt pip (gói), vd

    cd C:\Python27\Scripts
    pip install cryptography  (or pycrypto, fabric, etc)

2

Tôi đã gặp một vấn đề tương tự gần đây. Trong trường hợp của tôi, các phiên bản cfficryptographyđược viết trong tests.txt không tương thích (cffi == 1.8.9 và mật mã == 1.9). Tôi đã giải quyết cập nhật cffivới phiên bản có sẵn cuối cùng.


1

Tôi thực sự gặp phải vấn đề tương tự khi cố gắng cài đặt Scrapy, điều này phụ thuộc vào mật mã được cài đặt trước. Tôi đang dùng Win764-bit với Python 2.7 64-bit được cài đặt. Câu trả lời của @ jsonm cuối cùng đã có tác dụng với tôi, nhưng trước tiên tôi phải Sao chép C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\vcvarsx86_amd64.batvào x86_amd64thư mục con trong thư mục bin đó để vcvarsall.batnó sẽ ngừng ném lỗi nói rằng nó bị thiếu cấu hình. Nếu bạn cần cấu hình các env vars cho một thiết lập khác, hãy chắc chắn sao chép vào tập tin bat vcvars tương ứng vào thư mục con tương ứng hoặc lệnh đầu tiên bên dưới có thể không hoạt động.

Sau đó, tôi đã chạy đoạn mã sau từ một dòng lệnh theo hướng dẫn của @ jsonm (được điều chỉnh cho cấu hình của tôi) ...

C:\> "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86_amd64 
C:\> set LIB=C:\OpenSSL-Win64\lib;%LIB% 
C:\> set INCLUDE=C:\OpenSSL-Win64\include;%INCLUDE% 
C:\> pip install cryptography

Va no đa hoạt động.



1

tôi đã tải xuống mã nguồn đầy đủ của paramiko từ pypi và đã làm

cài đặt python

nó hoạt động hoàn hảo

tất cả các gói pythondev / openssl / libffi mặc định đã có trong rrc.

tải xuống rpms có sự không phù hợp với vòng / phút và nhiều rắc rối hơn


0

Tôi đang gặp vấn đề tương tự:

pip install cryptography

.
.
.
Installing collected packages: cffi, cryptography
     Running setup.py install for cffi ... error

Sau đó, tôi cài đặt libffi-devel và vấn đề được giải quyết

yum install libffi-devel

0

Hai lệnh đó đã sửa nó cho tôi:

brew install openssl
brew link openssl --force

Nguồn: https://github.com/phusion/pasbah/issues/1630#issuecomment-148527656


1
Tôi thực sự khuyên bạn không nên làm brew link openssl --forcetrên OS X. Thay vào đó, chỉ cần nâng cấp pip của bạn lên phiên bản mới nhất và nó sẽ cài đặt một bánh xe được liên kết tĩnh cho cả cffi và mật mã mà không gặp vấn đề gì.
Paul Kehrer

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.