เกิดข้อผิดพลาดในการติดตั้ง psycopg2 ไม่พบไลบรารีสำหรับ -lssl


128

ฉันวิ่ง

sudo pip install psycopg2

และฉันได้ผลลัพธ์มากมายที่ดูเหมือนว่า:

cc -DNDEBUG -g -fwrapv -Os .....
.....
cc -DNDEBUG -g -fwrapv -Os .....
.....

และในตอนท้ายมันบอกว่า:

ld: library not found for -lssl

clang: error: linker command failed with exit code 1 (use -v to see invocation)

error: command 'cc' failed with exit status 1

----------------------------------------
Cleaning up...
Command /usr/bin/python -c "import setuptools, tokenize;__file__='/private/var/folders/bz/pvj1g9xj16d10pjjgbrfl3fw0000gn/T/pip_build_root/psycopg2/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /var/folders/bz/pvj1g9xj16d10pjjgbrfl3fw0000gn/T/pip-uE3thn-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /private/var/folders/bz/pvj1g9xj16d10pjjgbrfl3fw0000gn/T/pip_build_root/psycopg2
Storing debug log for failure in /Users/Tyler/Library/Logs/pip.log

การรันeasy_installหรือทำจากซอร์สทำให้ฉันมีข้อผิดพลาดเดียวกันในตอนท้าย (ส่วนเกี่ยวกับไลบรารีไม่พบสำหรับ -lssl)


การรันการติดตั้ง brew (หรืออัพเกรด) openssl ให้ผลดังต่อไปนี้

$ brew upgrade openssl
Error: openssl-1.0.1h already installed

ใครสามารถช่วยฉันออก?


คำตอบ:


286

สำหรับใครก็ตามที่กำลังมองหาวิธีแก้ปัญหานี้บน macOS Sierra 10.12 (หรือใหม่กว่า): ฉันแก้ไขสิ่งนี้โดยการติดตั้งเครื่องมือบรรทัดคำสั่ง:

xcode-select --install

หลังจากนั้นpip install psycopg2ควรทำงาน

หากไม่เป็นเช่นนั้นคุณสามารถลองเชื่อมโยงกับ openssl ของ brew:

env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip install psycopg2

ด้วย openssl ที่ติดตั้งผ่านการชง โปรดทราบว่าbrew link openssl --forceไม่ทำงานอีกต่อไป:

$ brew link openssl --force                                                                                 17.5s
Warning: Refusing to link: openssl
Linking keg-only openssl means you may end up linking against the insecure,
deprecated system OpenSSL while using the headers from Homebrew's openssl.
Instead, pass the full include/library paths to your compiler e.g.:
  -I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib

ดังที่ @macho ชี้ให้เห็นด้านล่างหากยังไม่ได้ผลคุณอาจต้องใช้--no-cacheตัวเลือกของ pip เช่น

env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip --no-cache install psycopg2

5
ที่จริงแล้วอาจจะเพียงพอที่นี้ควรจะใช้ระบบที่มีให้xcode-select --install sslฉันจะอัปเดตความคิดเห็นของฉันด้านบน
SAS

15
xcode-select install ดีพอสำหรับ python ของระบบ แต่ใช้ไม่ได้กับสภาพแวดล้อมเสมือนจริง
Andrew Martin

3
เพิ่งมี macOS Sierra 10.12 เพิ่งทำpip install psycopg2และเพิ่งได้รับข้อความแสดงข้อผิดพลาดเดียวกัน: 'ld: library not found for -lssl' xcode-select --installแก้ไขปัญหา
webtweakers

4
xcode-select --installแก้ไขปัญหาใน Sierra สำหรับฉันสำหรับสภาพแวดล้อมเสมือนจริงด้วย
Danra

5
คุณอาจต้องใช้ตัวเลือก --no-cache ของ pip เช่นenv LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip --no-cache install psycopg2
machow

59

ฉันติดตั้ง OpenSSL จาก brew ( brew install openssl)

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

export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
pip install psycopg2

27

เมื่อเรียกใช้brew link opensslฉันได้รับข้อความต่อไปนี้:

$ brew link openssl
Warning: Refusing to link: openssl
Linking keg-only openssl means you may end up linking against the insecure,
deprecated system OpenSSL while using the headers from Homebrew's openssl.
Instead, pass the full include/library paths to your compiler e.g.:
  -I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib

ทำตามคำแนะนำต่อไปนี้เป็นpipคำสั่งที่คุณต้องใช้:

$ pip install -r requirements.txt --global-option=build_ext --global-option="-I/usr/local/opt/openssl/include" --global-option="-L/usr/local/opt/openssl/lib"

11

ด้วย MacOS Catalina 10.15.4 คำสั่งต่อไปนี้เป็นคำสั่งเดียวที่ใช้ได้กับฉัน:

env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip install psycopg2

ทำงานกับโมฮาวีเช่นกัน ขอบคุณ!
sb9

คุณประหยัดเวลาของฉัน
sinwoobang

9

สิ่งที่ใช้ได้ผลสำหรับฉันคือคำใบ้ที่ให้ไว้ในคำสั่งเพื่อเชื่อมโยง openssl

$ brew link openssl
Warning: Refusing to link macOS-provided software: openssl
If you need to have openssl first in your PATH run:
  echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc

For compilers to find openssl you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl/include"

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

$ pip install psycopg2
Collecting psycopg2
  Using cached https://files.pythonhosted.org/packages/23/7e/93c325482c328619870b6cd09370f6dbe1148283daca65115cd63642e60f/psycopg2-2.8.2.tar.gz
Installing collected packages: psycopg2
  Running setup.py install for psycopg2 ... done
Successfully installed psycopg2-2.8.2

คนส่วนใหญ่อาจไม่ใช้ zsh แต่ยังไงก็ตามฉันแค่เรียกใช้ echo 'export PATH = "/ usr / local / opt / openssl / bin: $ PATH"' >> ~ / .zshrc และนั่นก็เพียงพอแล้วที่จะแก้ไขปัญหาโดยไม่ต้อง การเปลี่ยนแปลงสภาพแวดล้อม LDFLAGS และ CPPFLAGS vars
Mark Aquino

9

ในโมฮาวีฉันได้เพิ่มสิ่งเหล่านี้ลงใน. bash_profile

export PATH="/usr/local/opt/openssl/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/curl/lib -L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/curl/include -I/user/local/opt/openssl/include"

จากนั้นก็สามารถติดตั้ง Psycopg 2.8.3 ใน python 3.7.4 Virtualenv

หลังจากติดตั้ง xcode และเครื่องมือบรรทัดคำสั่งใหม่

คำตอบทั้งหมดข้างต้นช่วยได้!


4

นี่คือปัญหาของ macOs เวอร์ชันใหม่ซึ่ง pip ไม่สามารถติดตั้งcryptographyได้ สิ่งที่แก้ไขปัญหาของฉันคือให้ env กับคำสั่ง install:

brew install openssl
env LDFLAGS="-L$(brew --prefix openssl)/lib" CFLAGS="-I$(brew --prefix openssl)/include" <YOUR COMMAND HERE>

คุณสามารถแทนที่<YOUR COMMAND HERE>ด้วยpip install cryptographyหรือpip install <SOMETHING THAT REQUIRES cryptography>ตัวอย่างเช่น

ให้เครดิตกับบทความนี้: การแก้ไขข้อผิดพลาดร้ายแรงของ macOS Sierra: ไม่พบไฟล์ 'openssl / opensslv.h' หรือ 'openssl / aes.h'


4

การใช้ Fish คำสั่งสองคำสั่งต่อไปนี้ช่วยแก้ปัญหานี้ให้ฉันหลังจากติดตั้ง OpenSSL ด้วย Homebrew

set -gx LDFLAGS "-L/usr/local/opt/openssl/lib"
set -gx CPPFLAGS "-I/usr/local/opt/openssl/include"

ใช้brew info opensslเพื่อรับข้อมูลล่าสุด


1

เพิ่งมีปัญหานี้ใน High Sierra โดยเพิ่งติดตั้ง Python 3.7 ใน Virtualenv

วิธีแก้ไขคือใช้ Psycopg2 เวอร์ชันที่ใหม่กว่า เวอร์ชัน 2.7.7 ทำงานได้โดยที่ 2.7.1 ไม่ทำงาน


0

แทนที่จะติดตั้งติดpsycopg2ตั้งpsycopg2-binaryจากผู้เขียนคนเดียวกัน:

pip install psycopg2-binary

นี่คือสิ่งที่เอกสารกล่าวเกี่ยวกับแพ็คเกจ PyPI นี้:

คุณสามารถ [... ] รับแพคเกจแบบสแตนด์อะโลนโดยไม่ต้องใช้คอมไพเลอร์หรือไลบรารีภายนอกโดยการติดตั้งแพ็คเกจ psycopg2-binary จาก PyPI:

$ pip install psycopg2-binary

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


0

ฉันมีปัญหานี้กับโมฮาวี Mojave ไม่สร้างไดเร็กทอรี / usr / include ซึ่ง psycopg2 ต้องติดตั้ง สิ่งนี้ไม่ชัดเจน ฉันพบวิธีแก้ปัญหาที่นี่: วิธีอัปเดต Xcode จากบรรทัดคำสั่งซึ่งอ้างอิง: https://forums.developer.apple.com/thread/104296


หมายเหตุเพิ่มเติมเล็กน้อย: ฉันติดตั้ง Xcode และเครื่องมือบรรทัดคำสั่งแล้ว คำสั่ง xcode-select --install แสดงให้เห็นว่าฉันได้ติดตั้งไว้แล้วเช่นเดียวกับ xcode-select -p และ echo $? ส่งคืน 0 ซึ่งระบุว่าติดตั้งแล้ว ฉันใช้ pyenv และ pyenv-Virtualenv ดังนั้นฉันจึงติดตั้ง psycopg2 ในสภาพแวดล้อมเสมือนจริง
ProfX

0

ฉันมีข้อผิดพลาดเดียวกันนี้และได้รับการแก้ไขหลังจากที่ฉันติดตั้ง cython แล้ว


0

เรียกใช้ PyCharm จากสภาพแวดล้อม conda แก้ไขปัญหาของฉันโดยใช้:

--> conda install psycopg2
The following packages will be UPDATED: ...

...
Proceed ([y]/n)? 
--> y
--> pip3 install psycopg2
Installing collected packages: psycopg2
Running setup.py install for psycopg2 ... done
Successfully installed psycopg2-2.8.4

'''


0

ฉันติดตั้ง OpenSSL โดยใช้ MacPorts ดังนั้นไดเรกทอรีจึงไม่เหมือนของ Brew

sudo port install openssl

ฉันพบไดเรกทอรีโดยทำ:

port contents openssl | grep lib
port contents openssl | grep include

จากนั้นฉันส่งออกตัวแปร:

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

คุณอาจต้อง:

xcode-select --install


-4

ฉันได้จัดการแก้ไขโดยใช้:

brew unlink openssl && brew link openssl --force

ฉันไม่แน่ใจว่าสิ่งนี้แตกต่างจากการถอนการติดตั้ง / อัปเกรดเบียร์ที่ฉันทำบน OpenSSL ในความพยายามก่อนหน้านี้อย่างไร สมมติฐานของฉันคือการดำเนินการเหล่านี้ทำให้ไลบรารีที่ใช้ร่วมกัน "ผิดพลาด" บางส่วนซึ่งขัดขวางไม่ให้ทำงานได้ โปรดทราบว่าสิ่งนี้ยังแก้ไขปัญหาในการติดตั้งโมดูลการเข้ารหัส python

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