ข้อผิดพลาดแบ็กเอนด์ SSL เมื่อใช้ OpenSSL


88

ฉันพยายามติดตั้ง pycurl ใน Virtualenv โดยใช้ pip และฉันได้รับข้อผิดพลาดนี้

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

ฉันอ่านเอกสารบางส่วนระบุว่า"ในการแก้ไขปัญหานี้คุณต้องแจ้งให้ setup.py ทราบว่าใช้แบ็กเอนด์ SSL อะไร" (ที่มา)แม้ว่าฉันจะไม่แน่ใจว่าจะทำอย่างไรเนื่องจากฉันติดตั้ง pycurl โดยใช้ pip

ฉันจะระบุแบ็กเอนด์ SSL เมื่อติดตั้ง pycurl ด้วย pip ได้อย่างไร

ขอบคุณ


1
ระบบปฏิบัติการของคุณคืออะไร?
Evgenii

คำตอบ:


121

หลังจากอ่านไฟล์ INSTALLATION แล้วฉันสามารถแก้ปัญหาได้โดยการตั้งค่าตัวแปรสภาพแวดล้อมและทำการติดตั้งใหม่

  • ลบpycurlการติดตั้งที่มีอยู่

    pip uninstall pycurl

  • ตัวแปรการส่งออกด้วยแบ็กเอนด์ ssl เวลาลิงค์ของคุณ (ซึ่งเป็น openssl ด้านบน)

    export PYCURL_SSL_LIBRARY=openssl

  • จากนั้นติดตั้งใหม่pycurlโดยไม่มีแคช

    pip install pycurl --no-cache-dir

อาจมีวิธีแก้ปัญหาอื่น ๆ อยู่ที่นั่น แต่มันใช้งานได้ดีสำหรับฉันในการติดตั้งvirtualenvและpipการติดตั้ง


2
ขอบคุณPYCURL_SSL_LIBRARY=opensslทำงานได้อย่างสมบูรณ์แบบ!
thnee

สำหรับMac OS Xผู้ใช้: จำไม่ได้ว่าใช้set -x PYCURL_SSL_LIBRARY opensslแทนexport PYCURL_SSL_LIBRARY=opensslถ้าคุณใช้ปลาคอนโซลแทนการทุบตี
เสิร์จ

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

ขอบคุณ. ฉันได้ตรวจสอบวิธีแก้ไขปัญหานี้หลายวิธีแล้ว วิธีนี้ใช้ได้ผลในครั้งแรก
Matt Setter

step by step Virtualenv
helloworld2013

77

คำตอบของ helloworld2013 ถูกต้อง แต่คีย์ตรงกับไลบรารี SSL ที่ pycurl คาดหวัง ข้อผิดพลาดจะเป็นดังนี้:

pycurl: libcurl link-time ssl backend ( <library> ) แตกต่างจากแบ็กเอนด์ ssl เวลาคอมไพล์ ( <library>หรือ " none / other ")

ในการแก้ไขคุณต้องใช้ pycurl ไลบรารีที่คาดไว้ ในกรณีของฉันข้อผิดพลาดของฉันคือ " pycurl: libcurl link-time ssl backend ( nss ) แตกต่างจาก compile-time ssl backend (openssl) " ดังนั้นการแก้ไขของฉันคือ:

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=nss
pip install pycurl

1
ยอดเยี่ยม. สิ่งนี้ควรได้รับการโหวตมากกว่านี้ คำตอบเดิมใช้กับบางเครื่อง วิธีนี้เป็นวิธีทั่วไปในการแก้ไขขึ้นอยู่กับแพลตฟอร์มของคุณ
Nishant

6
อืมมันใช้ไม่ได้กับฉันบน Mac ดูเหมือนว่าPYCURL_SSL_LIBRARYจะถูกละเลยโดยสิ้นเชิง แบ็กเอนด์ ssl เวลาคอมไพล์เป็น "(ไม่มี / อื่น ๆ )" สำหรับฉันเสมอแม้ว่าจะecho PYCURL_SSL_LIBRARYให้opensslก็ตาม
Edward Newell

1
เช่น @EdwardNewell การแก้ไขนี้ใช้ไม่ได้กับฉันใน Scientific Linux (Rhel) แม้ว่าฉันจะระบุ nss สำหรับ PYCURL_SSL_LIBRARY แบ็กเอนด์ยังคงอยู่ (ไม่มี / อื่น ๆ )
Yondaime008

3
บน Mac ฉันลบpycurlและติดตั้งด้วยแฟล็ก: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
สิ่งนี้ใช้ได้ แต่กับตัวเลือกต่อไปนี้เท่านั้น: pip install pycurl --compile --no-cache-dirบน CentOS 7.3
Robert Yi

52

ด้วย macOS 10.13, openSSL ที่ติดตั้งไว้แล้วและ Virtualenv ฉันประสบความสำเร็จกับ:

# cd to your virtualenv, then…
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
ใช่บน MacOS 10.13.1 (High Sierra) นั่นเป็นเคล็ดลับ! ขอบคุณมาก! ในการติดตั้ง openssl ใหม่:brew reinstall openssl
Denis Arnaud

1
ฉันแก้ไขปัญหาของฉันแล้ว ขอบคุณ :)
JeongjinKim

1
แก้ไขปัญหาบน Mac OSX 10.13.4! ขอขอบคุณ.
user1192748

1
ขอขอบคุณ! แก้ไขปัญหาของฉันด้วย Mac OSX 10.13.4
Steven Church

2
แดริลเสียใจที่ได้ยินเช่นนั้น! มันใช้งานได้อีกครั้งสำหรับฉันใน Mojave ดังนั้นฉันไม่แน่ใจว่ามีอะไรเกิดขึ้น
Michael Wilson

25

ด้วย pip 7.1 คุณสามารถใส่สิ่งต่อไปนี้ในไฟล์ความต้องการของคุณ:

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

เพียงแค่แทนที่ nss ด้วยไลบรารีแบ็กเอนด์ ssl ที่เกี่ยวข้อง


1
โซลูชันนี้ดีกว่าการเอ็กซ์พอร์ต var และติดตั้งใหม่เนื่องจากสามารถแชร์ในไฟล์ requirements.txt และไม่จำเป็นต้องทำซ้ำสำหรับผู้ใช้แต่ละราย
dfarrell07

1
การส่งออกไม่ได้ผลสำหรับฉันใน CentOS 7 แต่การตั้งค่าตัวเลือกส่วนกลางทำได้ ขอบคุณ!
Aaron Nguyen

ฉันต้องรวมโซลูชันของคุณและของ @Michael Wilson เพื่อให้ใช้งานได้กับ macOS ดูเหมือนจะเป็นปัญหาเกี่ยวกับการเข้ารหัส - การสนทนาบางส่วนที่นี่: github.com/pyca/cryptography/issues/3489
kip2

20

วิธีการแก้ไข pycurl หลังจากอัปเดต Mac OS High Sierra:

  1. ติดตั้ง curl libraries อีกครั้งเพื่อใช้ OpenSSL แทน SecureTransport

    brew install curl --with-openssl
    
  2. ติดตั้ง pycurl ด้วยสภาพแวดล้อมและเส้นทางเวลาสร้างที่ถูกต้อง

    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
ทำงานให้ฉันใน High Sierra (โดยใช้ Virtualenv)
djangoat

1
ใช่ ดูบทความนี้ด้วยcscheng.info/2018/01/26/…
somecallitblues

ทำงานให้ฉันบน High Sierra (โดยใช้ Virtualenv) แต่ฉันต้องลบแฟ
ล็ก --user

ขอบคุณมาก!! นั่นเป็นประโยชน์อย่างเหลือเชื่อ ใช้งาน High Sierra และใช้เวลาสองสามชั่วโมงนี่เป็นทางออกเดียวที่ใช้งานได้ :)
Alessandro

เมื่อฉันใช้--userธงตามด้านบนฉันได้รับ:Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
Daryl Spitzer

19

สิ่งนี้ใช้ได้ผลสำหรับฉัน:

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=nss
easy_install pycurl

สิ่งนี้ไม่ได้ผลสำหรับฉัน (โปรดทราบความแตกต่างคือ easy_install vs 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
easy_installตัวเลือกที่เป็นเพียงคนเดียวที่ทำงาน ฉันไม่เข้าใจว่าทำไมมันถึงซับซ้อนขนาดนี้ export PYCURL_SSL_LIBRARY=opensslผมจำเป็นต้องมี ของฉันรายงานว่า "ไม่มี / อื่น ๆ " สำหรับไลบรารีที่คอมไพล์
CMCDragonkai

เพิ่งพบปัญหานี้และวิธีแก้ปัญหานี้เป็นวิธีเดียวที่ใช้ได้ผลสำหรับฉัน
Boudewijn Aasman

2
จากประสบการณ์ของฉัน pip ไม่ได้ลบ pucurl เวอร์ชันเก่าที่ติดตั้งมากับระบบปฏิบัติการอย่างสมบูรณ์ (Centos7.2 ในกรณีของฉัน) Pip ไม่ได้สัมผัส /usr/lib64/python2.7/site-packages/pycurl.so และไฟล์ egg-info จากเวอร์ชันก่อนหน้า ในทางกลับกัน Easy_install จะล้างสิ่งเหล่านั้นออกไปนอกเหนือจากการวางไข่ pycurl ลงในแพ็คเกจไซต์
sokhaty

ฮึลองทุกข้อข้างต้นแล้วไม่ได้ผล สิ่งนี้ใช้ได้ผลสำหรับฉันเมื่อข้อความแสดงข้อผิดพลาดเดิมของฉันคือ `` ImportError: pycurl: libcurl link-time ssl backend (openssl) แตกต่างจากแบ็กเอนด์ ssl เวลาคอมไพล์ (ไม่มี / อื่น ๆ ) ``
James McCormac

10

ฉันมีปัญหานี้มาหลายวันแล้ว สุดท้ายด้วยความช่วยเหลือของคำตอบอื่น ๆ ที่นี่ (ส่วนใหญ่เป็นของ Alexander Tyapkov) ฉันทำให้มันใช้งานได้กับ AWS Elastic Beanstalk

ติดตั้งด้วยตนเอง (เชื่อมต่อกับ 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"

สิ่งสำคัญ:โปรดทราบว่าคุณต้องแน่ใจว่าคุณใช้ Python และ PIP เวอร์ชันที่ถูกต้องมิฉะนั้นคุณอาจกำลังคอมไพล์สำหรับ Python 2.x และใช้ v3.x

ติดตั้งอัตโนมัติใน 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'

ฉันมีปัญหานี้เพราะฉันพยายามกำหนดค่า Celery 4 กับ Django 1.10 ใน Elastic Beanstalk หากเป็นกรณีของคุณฉันเขียนบล็อกโพสต์ทั้งหมดเกี่ยวกับเรื่องนี้


ฮึขอบคุณ สิ่งนี้อาจสร้างความรำคาญโดยเฉพาะอย่างยิ่งเนื่องจากไฟล์ config eb ดูไม่แน่นอนและไม่เคยให้ข้อผิดพลาดที่สมเหตุสมผล (รวมถึงปัญหาการจัดรูปแบบ)
Ian

ฉันเพิ่มคะแนนคำตอบนี้เนื่องจากช่วยฉันได้มากในการแก้ปัญหาที่คล้ายกันเมื่อติดตั้ง pycurl บน AWS: stackoverflow.com/questions/51019622/…
Greg Holst

8

ฉันใช้ CentOS 7 ฉันลองทำทุกข้อแล้ว แต่ไม่สามารถใช้งานได้เลย ปรากฎว่าฉันต้องเรียกใช้สิ่งเหล่านี้ในฐานะผู้ใช้รูท ดังนั้นหากคุณประสบปัญหาลองใช้วิธีแก้ไขปัญหาข้างต้นในฐานะผู้ใช้รูท ตัวอย่างเช่นนี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน:

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

แน่นอนข้อจำกัดความรับผิดชอบตามปกติทั้งหมดเกี่ยวกับการเรียกใช้ในฐานะผู้ใช้รูทมีผลใช้

หมายเหตุ: [nss | openssl | ssl | gnutls] ในโค้ดด้านบนหมายถึงการเลือกอย่างใดอย่างหนึ่งและไม่รวมวงเล็บเหลี่ยมหรือท่อ ผู้ที่ถามคำถามเดิมจะเลือก openssl ในกรณีเฉพาะของฉันฉันเลือก nss ข้อความแสดงข้อผิดพลาดของคุณควรแจ้งให้คุณทราบว่าควรเลือกตัวเลือกใด

2019 แก้ไข: การทำเช่นนี้sudo pip installอาจทำให้เกิดปัญหากับการติดตั้งระบบ Python ของเครื่อง บางทีอาจลองทำงานในสภาพแวดล้อมเสมือน Python และติดตั้งแพ็คเกจที่นั่น หากไม่ได้ผลเคล็ดลับ sudo ในคำตอบของฉันอาจเป็นหนึ่งในตัวเลือกสุดท้ายที่ควรพิจารณา


5

คุณสามารถดาวน์โหลดไฟล์ tar.gz จากที่นี่ จากนั้นแตกไฟล์ลงในโฟลเดอร์ คุณจะพบไฟล์ setup.py ที่นั่น เรียกใช้คำสั่งตรงนั้นที่ไซต์กล่าวถึง ตัวอย่างเช่น:

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

FYI: ฉันพยายามติดตั้ง pycurl ที่หน้าต่างของฉัน แต่ทำไม่ได้ แต่ทำบน linux ของฉัน


ขอบคุณสำหรับการตอบกลับ แต่สิ่งนี้จะใช้ได้กับฉันก็ต่อเมื่อฉันไม่ได้ทำการติดตั้งผ่าน Virtualenv และ pip
helloworld2013

@Sabuj เพื่อติดตั้งpycurlบน Windows ให้ใช้หนึ่งในตัวติดตั้งที่มีให้ในเว็บไซต์ที่ยอดเยี่ยมนี้: lfd.uci.edu/~gohlke/pythonlibs/#pycurl
Adam

4

ฉันใช้งานสิ่งนี้บน OS X และวิธีแก้ปัญหาข้างต้นบางส่วนใช้งานไม่ได้ คล้ายกับความคิดเห็นของเอ็ดเวิร์ด Newell ของPYCURL_SSL_LIBRARYตัวแปรดูเหมือนจะได้รับการปฏิเสธอย่างสิ้นเชิง
การอ่านเพิ่มเติมเกี่ยวกับเอกสารการติดตั้ง PycURLเปิดเผยสิ่งต่อไปนี้:

pip อาจติดตั้งแพ็กเกจที่คอมไพล์ก่อนหน้านี้แทนการคอมไพล์ pycurl ใหม่ด้วยตัวเลือกที่ระบุ

ดังนั้นฉันต้องบังคับให้คอมไพล์ด้วย:

pip install --compile pycurl

ซึ่งใช้ได้กับหลายกรณี อย่างไรก็ตามฉันพบในบางระบบที่ยังคงเพิกเฉยต่อตัวแปรดังนั้นคล้ายกับคำตอบของ maharg101ฉันใช้ตัวเลือกการติดตั้งซึ่งสามารถตั้งค่าผ่าน pip ได้ดังนี้:

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

ที่คุณเลือกหนึ่งในสามตัวเลือกภายในวงเล็บเหลี่ยม ขอให้สังเกตว่าตัวเลือกที่มีอยู่sslและไม่ได้ opensslหากคุณระบุ--with-opensslคุณจะได้รับข้อผิดพลาด นอกจากนี้โปรดทราบว่าหากคุณยุ่งกับPYCURL_SSL_LIBRARYตัวแปรและเปลี่ยนเป็นค่าที่ขี้ขลาดเพื่อดูว่าจะเกิดอะไรขึ้นคำสั่งสุดท้ายนี้จะจับได้และส่งข้อผิดพลาดหากตั้งค่าไว้ แต่ไม่ถูกต้อง


1
ถอนการติดตั้ง pycurl ก่อนและ pip install pycurl --global-option="--with-nss"ทำงานให้ฉัน สำหรับบันทึกข้อผิดพลาดของฉันคือImportError: pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (openssl)
ahyong

ขอบคุณ @ahyong เคล็ดลับตัวเลือกระดับโลกใช้ได้ผลสำหรับฉันแม้ว่าฉันจะลองใช้ในขณะที่ติดตั้งจาก tar แต่ก็ใช้งานได้กับ pip แต่ไม่ใช่กับ setup.py แปลก ...
Yondaime008

4

การติดตั้ง curl ใหม่

ฉันพยายามทุกคำแนะนำจากการสนทนานี้ แต่ไม่มีใครได้ผลสำหรับฉัน วิธีแก้ปัญหาฉันได้ติดตั้ง curl และ curlib ใหม่ หลังจากนั้นฉันก็สามารถติดตั้ง pycurl ด้วยการรองรับ ssl ภายในสภาพแวดล้อม

เมื่อเริ่มต้น:

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

ส่วนที่ 1 การติดตั้งใหม่ด้วย pip

ประการแรกฉันได้ลบ pycurl ออกจาก Virtualenv โดยใช้ pip ตามคำตอบก่อนหน้านี้:

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

แนวคิดที่นี่คือแพ็คเกจนั้นถูกแคชและเราเพิ่งติดตั้งใหม่ด้วยตัวเลือก openssl

ฉันยังพยายามคอมไพล์ pycurl ใหม่ด้วย pip โดยใช้:

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

.. แต่มีข้อผิดพลาดเดียวกันหลังจากทำงาน:

python
import pycurl
pycurl.version

ImportError: pycurl: libcurl link-time ssl backend ( gnutls ) แตกต่างจากแบ็กเอนด์ ssl เวลาคอมไพล์ ( openssl )

ส่วนที่ 2. การติดตั้งจากน้ำมันดิน

หลังจากวิธีการก่อนหน้าไม่ได้ผลฉันได้ตัดสินใจติดตั้ง pycurl จาก tar ด้วย:

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

มีการติดตั้ง pycurl ทั่วโลก แต่ไม่ได้อยู่ใน Virtualenv ฉันยังไม่ได้ตรวจสอบว่าติดตั้งรองรับ SSL หรือไม่ แต่คิดว่ายังไม่มี ssl

ตอนที่ 3 การติดตั้ง curl และ curllib ใหม่

ในที่สุดฉันก็เข้าใจว่า pycurl ไม่ได้ติดตั้งตามปกติในสภาพแวดล้อมเนื่องจาก global curl และ libcurl ถูกรวบรวมด้วย gnutls

ก่อนเริ่มตรวจสอบด้วย:

curl-config --configure

หนึ่งในบรรทัดเอาต์พุตจะเป็น

'- โดยไม่ใช้ ssl' '- พร้อม -gnutls'

ในการคอมไพล์ใหม่:

ขั้นแรกลบ curl:

sudo apt-get purge curl

ติดตั้งการอ้างอิงการสร้างใด ๆ ที่จำเป็นสำหรับ curl

sudo apt-get build-dep curl

รับข้อมูลล่าสุด (ณ วันที่ 20 ธันวาคม 2559) 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

ขั้นตอนปกติในการสร้างแอปจากแหล่งที่มา

./configure
./make
 sudo make install

หาก openssl ติดตั้งอย่างถูกต้องการกำหนดค่าจะพบโดยอัตโนมัติ ผลลัพธ์จะเป็น:

curl version: 7.51.0
การตั้งค่าโฮสต์: x86_64-pc-linux-gnu
ติดตั้งคำนำหน้า: / usr / local
คอมไพเลอร์: gcc
SSL support: เปิดใช้งาน (OpenSSL) ...

แก้ไขปัญหาใด ๆ ของแคชตำแหน่ง lib ระดับ C ("แคชไลบรารีที่ใช้ร่วมกัน")

sudo ldconfig

ตอนนี้ลองติดตั้ง pycurl ใหม่ภายในสภาพแวดล้อม:

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"

ผลลัพธ์ควรเป็น:

python
import pycurl
pycurl.version

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


4

สำหรับใครก็ตามที่มีปัญหาใน PyCharm CE บน macOS Mojave นี่คือวิธีที่ฉันทำให้มันทำงานใน venv:

  • ระบุเวอร์ชัน: 7.43.0.1
  • ตัวเลือก: --install-option = - with-openssl --install-option = - openssl-dir = / usr / local / opt / openssl

ภาพหน้าจอล่ามโครงการ PyCharm


1
สำหรับฉันบน macOS Mojave ฉันจำเป็นต้องเรียกใช้ brew ติดตั้ง openssl ใหม่จากนั้น pip install pycurl == 7.43.0.1 --install-option = - with-openssl --install-option = - openssl-dir = / usr / local / opt / openssl
user495732 Why Me

3

ฉันลองทุกอย่างที่นี่บน macOS 10.13 แต่ไม่ประสบความสำเร็จ แล้วฉันก็พบ https://gist.github.com/webinista/b4b6a4cf8f158431b2c5134630c2cbfeซึ่งใช้งานได้:

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

สิ่งนี้ใช้ได้ผลสำหรับฉันทั้งเมื่อไม่ได้ใช้ Virtualenv และภายใน Virtualenv



1

ไม่แน่ใจว่านี่เป็นเพราะการทำงานใน Virtualenv แต่บน CentOS 7 วิธีแก้ปัญหาเหล่านี้ไม่ได้ผลสำหรับฉัน วัตถุที่คอมไพล์ยังคงถูกจับจากแคช dir เมื่อฉันติดตั้งใหม่ หากคุณประสบปัญหาเดียวกันหลังจากลองวิธีแก้ไขปัญหาอื่น ๆ ที่นี่ให้ลองทำดังต่อไปนี้:

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

เหมือนกันที่ CentOS 7 มันใช้ไม่ได้จนกว่าฉันจะเพิ่ม--no-cahe-dirตัวเลือก เพียงแค่ต้องการพูดถึงเพิ่มเติมว่ามันประสบความสำเร็จในการทำงานภายใต้รูทsu -ตามที่ @alfonso แนะนำเท่านั้น ทำsudo pip3 ...ไม่ดีพอ อาจจำเป็นสำหรับตัวแปรสภาพแวดล้อมที่จะหยิบขึ้นมา
Nagev

1

ข้อผิดพลาด:

ImportError: pycurl: libcurl link-time ssl backend (openssl) แตกต่างจากแบ็กเอนด์ ssl เวลาคอมไพล์ (ไม่มี / อื่น ๆ )

สิ่งนี้ใช้ได้กับฉัน Mac 10.13, python 3.5, การนำเข้า pycurl ทำงานได้หลังจากติดตั้งเช่นนี้

pip3 uninstall pycurl;

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

สิ่งนี้ใช้ได้กับฉันเช่นกันใน Python 2.7.10 บน High Sierra
skyler

1

หลังจากติดอยู่กับสิ่งนี้มานานฉันพบว่า apple หยุดรวมส่วนหัว OpenSSL ตั้งแต่ OS X 10.11 El Capitan วิธีแก้ไข?

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

แน่นอนฉันต้องใช้เวลามากในการทำงานมันค่อนข้างน่ารำคาญฉันต้องบอกว่า มีความสุข!!
หนวดขาว

1

ปัญหาเดียวกันใน amazonlinux - แก้ไขได้
ฉันมีปัญหานี้ในขณะที่สร้างอิมเมจนักเทียบท่าตาม amazonlinux ติดตั้ง python3.7 และเพิ่มโมดูล pycurl โมดูล python อื่น ๆ ทั้งหมดได้รับการติดตั้งอย่างถูกต้องยกเว้น pycurl หลังจากลองใช้วิธีแก้ปัญหามากมายที่เสนอในเธรดที่เชื่อมโยงกับปัญหานี้ในที่สุดฉันก็แก้ปัญหาของฉันได้โดยใช้คำสั่งต่อไปนี้สำหรับการติดตั้งชิ้นส่วนทั้งหมด
yum -y install python3 python3-devel gcc libcurl-devel aws-cli openssl-static.x86_64
จากนั้นติดตั้งโมดูลอื่น ๆ เช่น psycopg2-binary คำขอใบรับรองโดยใช้:
pip3 install --user --no-cache-dir -r requirements.txt

และในที่สุดก็ติดตั้งโมดูล pycurl โดยใช้:

pip3 install --user --global-option="--with-openssl" --no-cache-dir pycurl
และส่งผ่านตัวเลือกระดับโลก openssl ที่นี่ การติดตั้งไลบรารีแบบคงที่openssl-static.x86_64แก้ไขปัญหาในกรณีของฉันโดยใช้ตัวเลือกส่วนกลางที่ใช้โดยคำสั่ง pip3 ที่สอง


0

สำหรับ python 2.7.2

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

สำหรับ python 3.5 ให้ติดตั้งถัดไป:

sudo apt-get install python3.5-dev

ดาวน์โหลด pycurl-7.43.0.tar.gz (md5) ล่าสุดจาก pypi https://pypi.python.org/pypi/pycurl/7.43.0#downloads และรันคำสั่งถัดไป:

python setup.py --with-openssl install

นอกจากนี้คุณสามารถทำได้ในสภาพแวดล้อม python:

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


0

ฉันพบปัญหานี้และคำตอบของ Sanket Jagtapสำหรับฉัน ฉันลองใช้คำตอบที่มีคะแนนโหวตมากที่สุด แต่ก็ไม่ได้ผล

openssl เวอร์ชันเก่าของฉันคือ 1.0.1t ฉันคิดว่าการติดตั้ง openssl ใหม่อาจช่วยแก้ปัญหานี้ได้

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

ผมสร้างขึ้นมาใหม่ OpenSSL ล่าสุดและพยายามที่นี้คำตอบ ลองดู.

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

สิ่งนี้ได้ผลสำหรับฉัน

ฉันขอแนะนำให้เราติดตั้ง openssl ของเราใหม่เพื่อลอง ..


0

ต่อไปนี้ทำงานให้ฉันด้วย 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

ลิงก์นี้สรุปสาเหตุที่ทำให้เกิดข้อผิดพลาดและให้คำแนะนำที่ชัดเจนในการแก้ไขปัญหา

https://cscheng.info/2018/01/26/installing-pycurl-on-macos-high-sierra.html

สำหรับฉันปัญหาเกิดขึ้นเมื่อฉันอัปเกรดเป็น High-Sierra จาก El Captain


0

FWIW ฉันพบปัญหามากมายในการทำงานนี้ผ่าน AWS Elastic Beanstalk และในที่สุดก็สามารถใช้งานได้กับ:

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

เมื่อเร็ว ๆ นี้ในขณะที่อัปเกรดโครงการ Django ฉันมีข้อผิดพลาดที่คล้ายกัน แต่คราวนี้การตั้งค่าตัวแปรสภาพแวดล้อมไม่ทำงาน ดังนั้นฉันต้องตั้งค่าตัวแปรสภาพแวดล้อมทั้งสองexport PYCURL_SSL_LIBRARY=opensslและส่งผ่านแฟล็--global-option="with-openssl"

คำตอบเดิมถูกโพสต์ไว้ในหน้านี้


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.