Lỗi phụ trợ SSL khi sử dụng OpenSSL


87

Tôi đã cố gắng cài đặt pycurl trong virtualenv bằng cách sử dụng pip và gặp lỗi này

ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)

Tôi đã đọc một số tài liệu nói rằng "Để khắc phục sự cố này, bạn cần cho setup.py biết phần mềm phụ trợ SSL được sử dụng như thế nào " (nguồn) mặc dù tôi không chắc chắn cách thực hiện việc này vì tôi đã cài đặt pycurl bằng pip.

Làm cách nào để chỉ định phần phụ trợ SSL khi cài đặt pycurl với pip?

Cảm ơn


1
Hệ điều hành của bạn là gì?
Evgenii

Câu trả lời:


121

Sau khi đọc tệp CÀI ĐẶT của họ, tôi đã có thể giải quyết vấn đề của mình bằng cách đặt biến môi trường và cài đặt lại

  • gỡ bỏ pycurlcài đặt hiện có

    pip uninstall pycurl

  • xuất biến với phụ trợ ssl thời gian liên kết của bạn (là openssl ở trên)

    export PYCURL_SSL_LIBRARY=openssl

  • sau đó, cài đặt lại pycurlkhông có bộ nhớ cache

    pip install pycurl --no-cache-dir

Có thể có giải pháp khác ngoài đó nhưng điều này hoạt động hoàn hảo đối với tôi trên một virtualenvpipcài đặt.


2
Cảm ơn, PYCURL_SSL_LIBRARY=opensslhoạt động hoàn hảo!
thnee

Đối với người dùng mac os x : không nhớ sử dụng set -x PYCURL_SSL_LIBRARY opensslthay vì export PYCURL_SSL_LIBRARY=opensslnếu bạn sử dụng bảng điều khiển thay vì bash .
Serge

13
pip install pycurl --no-cache-dir
Shuguang Yang.

Cảm ơn. Tôi đã xem qua một số giải pháp tiềm năng cho vấn đề này. Giải pháp này đã hoạt động ngay lần đầu tiên.
Matt Setter

từng bước virtualenv cài đặt ví dụ yippeecode.com/view-code/343QWQT144/…
helloworld2013

77

Câu trả lời của helloworld2013 là đúng, nhưng khóa khớp với thư viện SSL mà pycurl đang mong đợi. Lỗi sẽ như sau:

pycurl: libcurl link-time ssl backend ( <library> ) khác với compile-time ssl backend ( <library> hoặc " none / other ")

Để khắc phục, bạn phải sử dụng thư viện mà pycurl đang mong đợi. Trong trường hợp của tôi, lỗi của tôi là " pycurl: libcurl link-time ssl backend ( nss ) khác với compile-time ssl backend (openssl) ", vì vậy cách khắc phục của tôi là:

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=nss
pip install pycurl

1
Xuất sắc . Điều này sẽ nhận được nhiều phiếu bầu hơn. Câu trả lời ban đầu áp dụng cho một số máy. Đây là cách tổng quát hơn để sửa chữa nó tùy thuộc vào nền tảng của bạn.
Nishant

6
hmm điều này không hiệu quả với tôi trên máy Mac. Nó có vẻ như PYCURL_SSL_LIBRARYđang bị bỏ qua hoàn toàn. Phần phụ trợ ssl thời gian biên dịch luôn là "(không có / khác)" đối với tôi, mặc dù echo PYCURL_SSL_LIBRARYcho openssl.
Edward Newell

1
như @EdwardNewell sửa chữa này không làm việc cho tôi trên Scientific Linux (RHEL), mặc dù tôi đã xác định NSS cho PYCURL_SSL_LIBRARY, phần còn lại phụ trợ (none / khác)
Yondaime008

3
Trên máy Mac, tôi đã gỡ bỏ pycurlvà cài đặt các cờ:pip install --global-option="--with-openssl" --global-option=build_ext --global-option="-L/usr/local/opt/openssl/lib" --global-option="-I/usr/local/opt/openssl/include" pycurl
eigenein

2
Điều này đã hoạt động nhưng chỉ với các tùy chọn sau: pip install pycurl --compile --no-cache-dirtrên CentOS 7.3.
Robert Yi

51

Với OSX 10.13, openSSL được cài đặt sẵn và virtualenv, tôi đã thành công với:

workon ..your-environment-here..
pip uninstall pycurl
export PYCURL_SSL_LIBRARY=openssl
export LDFLAGS=-L/usr/local/opt/openssl/lib;export CPPFLAGS=-I/usr/local/opt/openssl/include;pip install pycurl --compile --no-cache-dir

4
Vâng, trên MacOS 10.13.1 (High Sierra), điều đó đã thực hiện một mẹo nhỏ! Cảm ơn nhiều! Để cài đặt lại openssl:brew reinstall openssl
Denis Arnaud

1
Tôi đã khắc phục sự cố của mình với nó. Cảm ơn :)
JeongjinKim

1
Đã khắc phục sự cố trên Mac OSX 10.13.4! Cảm ơn bạn.
user1192748

1
Cảm ơn bạn! Cũng đã khắc phục sự cố của tôi. Mac OSX 10.13.4
Steven Church,

2
Daryl rất tiếc khi nghe điều đó! Nó đã hoạt động trở lại đối với tôi trên Mojave, vì vậy tôi không chắc có chuyện gì.
Michael Wilson

25

Với pip 7.1, bạn có thể đưa những thông tin sau vào tệp yêu cầu của mình:

pycurl==7.19.5.1 --global-option="--with-nss"

Chỉ cần thay thế nss bằng thư viện phụ trợ ssl có liên quan.


1
Giải pháp này tốt hơn là xuất var và cài đặt lại vì nó có thể được chia sẻ trong tệp tin request.txt và không phải lặp lại cho mỗi người dùng.
dfarrell07,

1
export không hoạt động đối với tôi trên CentOS 7. Nhưng thiết lập tùy chọn toàn cầu đã làm được. Cảm ơn!
Aaron Nguyen

Tôi đã phải kết hợp giải pháp của bạn và của @Michael Wilson để làm cho nó hoạt động trên macOS. Trông giống như một vấn đề crypto - một số cuộc thảo luận ở đây: github.com/pyca/cryptography/issues/3489
kip2

20

Phương pháp sửa lỗi pycurl sau khi cập nhật Mac OS High Sierra:

  1. Cài đặt lại các thư viện curl để sử dụng OpenSSL thay vì SecureTransport

    brew install curl --with-openssl
    
  2. Cài đặt pycurl với môi trường và đường dẫn thời gian xây dựng chính xác

    export PYCURL_SSL_LIBRARY=openssl
    pip uninstall pycurl 
    pip install --no-cache-dir --global-option=build_ext --global-option="-L/usr/local/opt/openssl/lib" --global-option="-I/usr/local/opt/openssl/include" --user pycurl
    

2
Đã làm việc cho tôi trên High Sierra (sử dụng virtualenv).
djangoat

1
Đúng! Cũng xem bài viết này cscheng.info/2018/01/26/...
somecallitblues

Làm việc cho tôi trên cao Sierra (sử dụng một virtualenv) nhưng tôi đã phải gỡ bỏ cờ --user
user495732 Tại sao nhớ

Cảm ơn rât nhiều!! Điều đó vô cùng hữu ích. Chạy High Sierra và dành một vài giờ vào nó, đây là giải pháp duy nhất mà làm việc :)
Alessandro

Khi tôi sử dụng --userlá cờ như trên, tôi nhận:Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
Daryl Spitzer

19

Điều này đã làm việc cho tôi:

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=nss
easy_install pycurl

Không điều nào trong số này phù hợp với tôi (lưu ý sự khác biệt đơn giản là easy_install so với pip):

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls]
pip install pycurl
#xor
curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.19.3.1.tar.gz
#...
python setup.py --with-[nss|openssl|ssl|gnutls] install

1
Các easy_installtùy chọn là người duy nhất mà làm việc. Tôi không hiểu tại sao điều này lại phức tạp như vậy. Tôi cần export PYCURL_SSL_LIBRARY=openssl. Một của tôi đã báo cáo "không có / khác" cho thư viện đã biên dịch.
CMCDragonkai

Chỉ gặp vấn đề này và giải pháp này là giải pháp duy nhất phù hợp với tôi.
Boudewijn Aasman

2
Theo kinh nghiệm của tôi, pip không loại bỏ hoàn toàn phiên bản pucurl cũ đã được cài đặt với Hệ điều hành (trong trường hợp của tôi là Centos7.2). Pip không chạm vào /usr/lib64/python2.7/site-packages/pycurl.so và các tệp thông tin trứng từ phiên bản trước đó. Mặt khác, Easy_install đã xóa sạch những thứ đó ngoài việc đặt trứng pycurl vào các gói trang web.
sokhaty

Rất tiếc, đã thử tất cả các cách trên và nó không hoạt động. Điều này đã hoạt động đối với tôi khi thông báo lỗi ban đầu của tôi là `` ImportError: pycurl: libcurl link-time ssl backend (openssl) khác với chương trình compile-time ssl backend (không có / khác) ''
James McCormac

10

Tôi đã có vấn đề này trong nhiều ngày. Cuối cùng với sự trợ giúp của các câu trả lời khác ở đây (chủ yếu là của Alexander Tyapkov), tôi đã làm cho nó hoạt động cho AWS Elastic Beanstalk.

Cài đặt thủ công (kết nối với SSH):

sudo pip uninstall pycurl
curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz
sudo pip install pycurl-7.43.0.tar.gz --global-option="--with-nss"

QUAN TRỌNG: Xin lưu ý rằng bạn phải đảm bảo rằng bạn đang sử dụng phiên bản chính xác của Python và PIP, nếu không bạn có thể đang biên dịch nó cho Python 2.x và sử dụng v3.x.

Tự động cài đặt trong Elastic Beanstalk:

files:
  "/usr/local/share/pycurl-7.43.0.tar.gz" :
    mode: "000644"
    owner: root
    group: root
    source: https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz

commands:
  01_download_pip3:
    # run this before PIP installs requirements as it needs to be compiled with OpenSSL
    command: 'curl -O https://bootstrap.pypa.io/get-pip.py'
  02_install_pip3:
    # run this before PIP installs requirements as it needs to be compiled with OpenSSL
    command: 'python3 get-pip.py'
  03_pycurl_uninstall:
    # run this before PIP installs requirements as it needs to be compiled with OpenSSL
    command: '/usr/bin/yes | sudo pip uninstall pycurl'
  04_pycurl_download:
    # run this before PIP installs requirements as it needs to be compiled with OpenSSL
    command: 'curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz'
  05_pycurl_reinstall:
    # run this before PIP installs requirements as it needs to be compiled with OpenSSL
    command: 'sudo pip install pycurl-7.43.0.tar.gz --global-option="--with-nss"'

container_commands:
  09_pycurl_reinstall:
    # run this before PIP installs requirements as it needs to be compiled with OpenSSL
    # the upgrade option is because it will run after PIP installs the requirements.txt file.
    # and it needs to be done with the virtual-env activated
    command: 'source /opt/python/run/venv/bin/activate && pip3 install /usr/local/share/pycurl-7.43.0.tar.gz --global-option="--with-nss" --upgrade'

Tôi gặp sự cố này vì tôi đang cố định cấu hình Celery 4 với Django 1.10 trong Elastic Beanstalk. Nếu đó là trường hợp của bạn, tôi đã viết một bài đăng trên blog đầy đủ về nó .


ugh cảm ơn bạn. nội dung này có thể gây khó chịu, đặc biệt là vì các tệp cấu hình eb có vẻ rất hay thay đổi và không bao giờ cung cấp cho bạn các lỗi hợp lý (bao gồm cả các vấn đề về định dạng)
Ian

Tôi đã ủng hộ câu trả lời này vì nó đã giúp tôi rất nhiều để giải quyết vấn đề tương tự khi cài đặt pycurl trên AWS: stackoverflow.com/questions/51019622/…
Greg Holst

8

Tôi đang sử dụng CentOS 7. Tôi đã thử tất cả các cách trên và không thể làm gì cả. Hóa ra tôi cần chạy những thứ này với tư cách là người dùng root. Vì vậy, nếu bạn gặp sự cố, hãy thử bất kỳ giải pháp nào ở trên với tư cách là người dùng root. Ví dụ, đây là những gì hiệu quả với tôi:

su -
pip uninstall pycurl
export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls]
pip install pycurl

Tất nhiên, tất cả các tuyên bố từ chối trách nhiệm thông thường về việc chạy với tư cách người dùng root đều được áp dụng.

Lưu ý: [nss | openssl | ssl | gnutls] trong đoạn mã trên có nghĩa là chọn một và không bao gồm dấu ngoặc vuông hoặc ống dẫn. Người đặt câu hỏi ban đầu sẽ chọn openssl. Trong trường hợp cụ thể của tôi, tôi đã chọn nss. Thông báo lỗi của bạn sẽ cho bạn biết lựa chọn nào để thực hiện.

Chỉnh sửa năm 2019: Việc thực hiện sudo pip installcó thể gây ra sự cố với quá trình cài đặt hệ thống Python của máy. Có lẽ hãy thử làm việc trong môi trường ảo Python và cài đặt các gói ở đó. Nếu điều đó không hiệu quả, mẹo sudo trong câu trả lời của tôi có lẽ là một trong những lựa chọn cuối cùng để xem xét.


5

Bạn có thể tải xuống tệp tar.gz từ đây . Sau đó giải nén nó vào một thư mục. Bạn sẽ tìm thấy một tệp setup.py ở đó. Chạy lệnh ở đó mà trang web đã đề cập. Ví dụ:

python setup.py --with-[ssl|gnutls|nss] install

FYI: Tôi đã cố gắng cài đặt pycurl trên cửa sổ của mình, nhưng không thể. Nhưng đã làm điều đó trên linux của tôi.


cảm ơn cho câu trả lời, nhưng điều này chỉ có thể làm việc cho tôi nếu Im không làm việc cài đặt thông qua một virtualenv và pip
helloworld2013

@Sabuj để cài đặt pycurl trên một sử dụng Windows của trình cài đặt được cung cấp trên trang web tuyệt vời này: lfd.uci.edu/~gohlke/pythonlibs/#pycurl
Adam

4

Tôi đang chạy phần mềm này trên OS X và một số giải pháp ở trên không hoạt động. Tương tự như bình luận Edward Newell của các PYCURL_SSL_LIBRARYbiến dường như đã bị bỏ qua hoàn toàn.
Đọc thêm tài liệu cài đặt PycURL cho thấy những điều sau:

pip có thể cài đặt lại gói mà nó đã biên dịch trước đó thay vì biên dịch lại pycurl với các tùy chọn mới được chỉ định

Do đó, tôi đã buộc nó phải biên dịch với:

pip install --compile pycurl

Điều đó hoạt động trên một số trường hợp. Tuy nhiên, tôi đã gặp phải một số hệ thống tiếp tục bỏ qua biến, tương tự như câu trả lời của maharg101 , tôi đã sử dụng các tùy chọn cài đặt thông qua pip có thể được đặt như sau:

pip install pycurl --global-option="--with-[ssl|gnutls|nss]"

nơi bạn chọn một trong ba tùy chọn bên trong dấu ngoặc vuông. Lưu ý rằng tùy chọn có sẵn là sslkhông openssl . Nếu bạn chỉ định, --with-opensslbạn sẽ gặp lỗi. Cũng lưu ý rằng nếu bạn đang bối rối với PYCURL_SSL_LIBRARYbiến và chuyển nó sang các giá trị sôi nổi để xem điều gì sẽ xảy ra thì lệnh cuối cùng này chắc chắn sẽ bắt được nó và gây ra lỗi nếu giá trị được đặt nhưng không hợp lệ.


1
trước tiên hãy gỡ cài đặt pycurl và làm pip install pycurl --global-option="--with-nss"việc với tôi. Đối với hồ sơ, lỗi của tôi làImportError: pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (openssl)
ahyong

Cảm ơn @ahyong tùy chọn lừa toàn cầu làm việc cho tôi, mặc dù tôi đã cố gắng trong khi cài đặt từ hắc ín, nó làm việc với pip nhưng không phải với setup.py lạ ...
Yondaime008

4

Cài đặt lại cuộn

Tôi đã thử mọi gợi ý từ cuộc thảo luận này nhưng không ai làm việc cho tôi. Như giải pháp, tôi đã cài đặt lại cuộn và lề đường. Sau đó, tôi đã có thể cài đặt pycurl với hỗ trợ ssl bên trong môi trường.

Khi bắt đầu:

'PycURL / 7.43.0 libcurl / 7.47.0 GnuTLS / 3.4.10 zlib / 1.2.8 libidn / 1.32 librtmp / 2.3'

Phần 1.Re/Installation với pip

Đầu tiên, tôi đã xóa pycurl khỏi virtualenv bằng cách sử dụng pip như các câu trả lời trước đó đã đề xuất:

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=openssl
pip install pycurl --global-option="--with-openssl"

Ý tưởng ở đây là gói đó đã được lưu vào bộ nhớ cache và chúng tôi chỉ cần kết nối lại nó với tùy chọn openssl.

Tôi cũng đã cố gắng biên dịch lại pycurl bằng pip bằng cách sử dụng:

pip install pycurl --compile pycurl --no-cache

..nhưng gặp lỗi tương tự sau khi chạy:

python
import pycurl
pycurl.version

ImportError: pycurl: libcurl link-time ssl backend ( gnutls ) khac voi compile-time ssl backend ( openssl )

Phần 2. Cài đặt từ tar

Sau khi phương pháp trước đó không hoạt động, tôi đã quyết định cài đặt pycurl từ tar với:

curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz
sudo tar -xzvf pycurl-7.43.0.tar.gz
cd pycurl-7.43.0/
sudo python setup.py --with-ssl install

Nó đã cài đặt pycurl trên toàn cầu nhưng không phải trong virtualenv. Tôi cũng không kiểm tra xem nó có được cài đặt với hỗ trợ SSL hay không nhưng nghĩ rằng vẫn không có ssl.

Phần 3. Cài đặt lại curl và curllib

Cuối cùng, tôi hiểu rằng pycurl không cài đặt bình thường vào môi trường bởi vì global curl và libcurl được biên dịch bằng gnutls.

Trước khi bắt đầu, hãy kiểm tra nó với:

curl-config --configure

Một trong những dòng đầu ra sẽ là

'--without-ssl' '--with-gnutls'

Để biên dịch lại nó:

Đầu tiên loại bỏ lọn tóc:

sudo apt-get purge curl

Cài đặt bất kỳ phụ thuộc xây dựng nào cần thiết cho curl

sudo apt-get build-dep curl

Nhận mới nhất (kể từ ngày 20 tháng 12 năm 2016) libcurl

mkdir ~/curl
wget http://curl.haxx.se/download/curl-7.51.0.tar.bz2
tar -xvjf curl-7.51.0.tar.bz2
cd curl-7.51.0

Các bước thông thường để xây dựng ứng dụng từ nguồn

./configure
./make
 sudo make install

Nếu openssl được cài đặt đúng cách thì cấu hình sẽ tự động tìm thấy nó. Đầu ra sẽ là:

phiên bản curl: 7.51.0
Thiết lập máy chủ: x86_64-pc-linux-gnu
Cài đặt tiền tố: / usr / local
Trình biên dịch: gcc
Hỗ trợ SSL: đã bật (OpenSSL) ...

Giải quyết mọi vấn đề về bộ đệm ẩn vị trí lib cấp C ("bộ đệm thư viện được chia sẻ")

sudo ldconfig

Bây giờ hãy thử cài đặt lại pycurl trong môi trường:

curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz
pip install pycurl-7.43.0.tar.gz --global-option="--with-openssl"

Kết quả sẽ là:

python
import pycurl
pycurl.version

'PycURL / 7.43.0 libcurl / 7.51.0 OpenSSL / 1.0.2g zlib / 1.2.8 librtmp / 2.3'


3

Đối với bất kỳ ai gặp sự cố bên trong PyCharm CE trên macOS Mojave, đây là cách tôi làm cho nó hoạt động trong venv:

  • chỉ định phiên bản: 7.43.0.1
  • Các lựa chọn: --install-option = - with-openssl --install-option = - openssl-dir = / usr / local / opt / openssl

Ảnh chụp màn hình Trình thông dịch dự án PyCharm


1
Đối với tôi trên macOS Mojave, tôi cần phải chạy brew reinstall openssl và sau đó pip install pycurl == 7.43.0.1 --install-option = - with-openssl --install-option = - openssl-dir = / usr / local / opt / openssl
user495732 Why Me


2

Tôi đã thử mọi thứ ở đây trên macOS 10.13 nhưng không thành công. Sau đó, tôi tìm thấy https://gist.github.com/webinista/b4b6a4cf8f158431b2c5134630c2cbfe hoạt động:

brew install curl --with-openssl
pip uninstall pycurl
export PYCURL_SSL_LIBRARY=openssl
export LDFLAGS=-L/usr/local/opt/openssl/lib;export CPPFLAGS=-I/usr/local/opt/openssl/include; pip install pycurl --compile --no-cache-dir

Điều này phù hợp với tôi cả khi không sử dụng virtualenv và trong virtualenv.


1

Tôi không chắc đây có phải là do chạy trong virtualenv hay không, nhưng trên CentOS 7, các giải pháp này không hoạt động với tôi; các đối tượng đã biên dịch vẫn đang được lấy từ bộ đệm ẩn khi tôi cài đặt lại. Nếu bạn gặp phải vấn đề tương tự sau khi thử các giải pháp khác tại đây, hãy thử các cách sau:

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls]
pip install pycurl --no-cache-dir

Tương tự ở đây, trên CentOS 7, nó không hoạt động cho đến khi tôi thêm --no-cahe-dirtùy chọn. Chỉ muốn đề cập thêm rằng nó chỉ thành công khi chạy dưới gốc với su -như @alfonso đã đề xuất. Làm sudo pip3 ...không đủ tốt. Có lẽ cần thiết để chọn biến môi trường.
Nagev

1

Lỗi:

ImportError: pycurl: libcurl link-time ssl backend (openssl) khác với compile-time ssl backend (none / other)

Điều này đã hoạt động đối với tôi, Mac 10.13, python 3.5, nhập pycurl đã hoạt động sau khi cài đặt như thế này

pip3 uninstall pycurl;

pip3 install --compile --install-option="--with-openssl" pycurl

Điều này cũng hiệu quả với tôi trên Python 2.7.10 trên High Sierra.
skyler

1

Sau khi bị mắc kẹt trong một thời gian dài, tôi phát hiện ra rằng apple đã ngừng bao gồm các tiêu đề OpenSSL kể từ OS X 10.11 El Capitan. làm thế nào để khắc phục?

1) brew install openssl

2) echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile (or .zshrc for zsh, etc)

3) pip uninstall pycurl

4) pip install --install-option="--with-openssl" --install-option="--openssl-dir=/usr/local/opt/openssl" pycurl

Chắc chắn, tôi đã mất rất nhiều thời gian để làm cho nó hoạt động, tôi phải nói là khá khó chịu. Chúc vui vẻ!!
Whitebear

1

Vấn đề tương tự trên amazonlinux - đã giải quyết
Tôi gặp sự cố này khi tạo hình ảnh docker dựa trên amazonlinux, cài đặt python3.7 và thêm mô-đun pycurl. Tất cả các mô-đun python khác đã được cài đặt đúng cách ngoại trừ pycurl. Sau khi thử nhiều giải pháp được đề xuất trong các chủ đề liên quan đến vấn đề này, cuối cùng tôi đã giải quyết được vấn đề của mình bằng cách sử dụng các lệnh sau để cài đặt tất cả các phần.
yum -y install python3 python3-devel gcc libcurl-devel aws-cli openssl-static.x86_64
sau đó cài đặt các mô-đun khác như psycopg2-binary, request, certifi bằng cách sử dụng:
pip3 install --user --no-cache-dir -r requirements.txt

và cuối cùng đã cài đặt mô-đun pycurl bằng cách sử dụng:

pip3 install --user --global-option="--with-openssl" --no-cache-dir pycurl
và chuyển đến đây tùy chọn toàn cầu openssl. Việc cài đặt thư viện tĩnh openssl-static.x86_64 đã giải quyết được vấn đề trong trường hợp của tôi là sử dụng tùy chọn toàn cục được sử dụng bởi lệnh pip3 thứ hai.


0

Đối với python 2.7

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

Đối với python 3.5 cũng cài đặt tiếp theo:

sudo apt-get install python3.5-dev

Tải xuống nguồn pycurl-7.43.0.tar.gz (md5) mới nhất từ ​​pypi https://pypi.python.org/pypi/pycurl/7.43.0#downloads và chạy lệnh tiếp theo:

python setup.py --with-openssl install

Ngoài ra, bạn có thể làm điều đó trong môi trường python:

(test_env)user@pc:~/Downloads/pycurl-7.43.0$ python setup.py --with-openssl install

0
pip install -U pip

if [ "$(curl --version | grep NSS 2>/dev/null)" ]; then
    pip install --compile --install-option="--with-nss" pycurl
else
    pip install --compile --install-option="--with-openssl" pycurl
fi

0

Tôi gặp phải vấn đề này và câu trả lời của Sanket Jagtap đã phù hợp với tôi. Tôi đã thử câu trả lời với câu trả lời nhiều phiếu nhất nhưng nó không hoạt động.

Phiên bản cũ openssl của tôi là 1.0.1t, tôi nghĩ rằng việc cài đặt lại openssl có thể giải quyết được vấn đề này.

--- pycurl's openssl backend time....

Tôi đã xây dựng lại openssl mới nhất và thử câu trả lời này . Kiểm tra điều này.

pip install --compile --install-option="--with-openssl" pycurl

Điều này đã làm việc cho tôi.

tôi khuyên chúng ta nên cài đặt lại openssl để thử ..


0

Sau đây đã làm việc cho tôi với Python3.6

MacOS High-Sierra

sudo pip3 uninstall pycurl
sudo pip3 install --compile --install-option="--with-openssl" pycurl 

CentOS 7

sudo pip3 uninstall pycurl
sudo pip3 install --compile --install-option="--with-nss" pycurl


0

FWIW, tôi đã gặp phải rất nhiều vấn đề khi làm việc này thông qua AWS Elastic Beanstalk và cuối cùng đã có thể làm cho nó hoạt động với:

packages:
  yum:
    openssl-devel: []
    libcurl-devel: []

container_commands:
  # Reinstall PyCurl with correct ssl backend
  05_reinstall_pycurl:
    command: |
      pip install --upgrade pip
      pip uninstall -y pycurl
      pip install --global-option='--with-openssl' pycurl

0

Gần đây trong khi nâng cấp dự án Django, tôi đã gặp lỗi tương tự. Nhưng lần này thiết lập biến môi trường không hoạt động. Vì vậy, tôi đã phải đặt cả biến môi trường export PYCURL_SSL_LIBRARY=opensslvà chuyển cờ --global-option="with-openssl".

Câu trả lời ban đầu đã được đăng trên trang này


-1
export CPPFLAGS=-I/usr/local/opt/openssl/include
export LDFLAGS=-L/usr/local/opt/openssl/lib

pip install pycurl --global-option="--with-openssl"
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.