macOS Catalina上Python3冲突的动态库依赖性问题;
我有一个Python虚拟环境设置,requirement.txt文件中列出的一个依赖项是macOS Catalina上Python3冲突的动态库依赖性问题;,python,python-3.x,macos,dynamic-linking,dylib,Python,Python 3.x,Macos,Dynamic Linking,Dylib,我有一个Python虚拟环境设置,requirement.txt文件中列出的一个依赖项是psycopg2。这将在我的环境macOS Catalina中成功安装和构建 pscycopg2在构建时使用pg_conf工具在构建期间检查并链接PostgreSQL libpq库。在操作系统上安装了两个版本的libpq: /Library/PostgreSQL/10/lib/libpq.5.dylib->指向/Library/PostgreSQL/10/lib/libpq.5.10.dylib的链接 /us
psycopg2
。这将在我的环境macOS Catalina中成功安装和构建
pscycopg2
在构建时使用pg_conf
工具在构建期间检查并链接PostgreSQL libpq库。在操作系统上安装了两个版本的libpq:
python-c import psycopg2
会引发一个错误:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/Users/simon/.pyenv/versions/flaskapp/lib/python3.8/site-packages/psycopg2/__init__.py", line 51, in <module>
from psycopg2._psycopg import ( # noqa
ImportError: dlopen(/Users/simon/.pyenv/versions/flaskapp/lib/python3.8/site-packages/psycopg2/_psycopg.cpython-38-darwin.so, 2): Symbol not found: _PQencryptPasswordConn
Referenced from: /Users/simon/.pyenv/versions/flaskapp/lib/python3.8/site-packages/psycopg2/_psycopg.cpython-38-darwin.so
Expected in: /usr/lib/libpq.5.dylib
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Users/simon/.pyenv/versions/flaskapp/lib/python3.8/site-packages/psycopg2/__-init___.py”,第51行,在
来自psycopg2._psycopg导入(#noqa
导入错误:dlopen(/Users/simon/.pyenv/versions/flaskapp/lib/python3.8/site-packages/psycopg2//u psycopg.cpython-38-darwin.so,2):未找到符号:\u PQencryptPasswordConn
引用自:/Users/simon/.pyenv/versions/flaskapp/lib/python3.8/site-packages/psycopg2//u psycopg.cpython-38-darwin.so
应为:/usr/lib/libpq.5.dylib
我怀疑这是因为它是针对/usr/lib/libpq.5.6.dylib进行链接的,而/usr/lib/libpq.5.6.dylib不同于在构建psycopg2期间链接的/Library/PostgreSQL/10/lib/libpq.5.10.dylib
- 我不确定什么程序使用/usr/lib/libpq.5.6.dylib。有什么方法可以找到吗
操作。在Catalina和更高版本中,安装名称工具
似乎是推荐的做法
````sudo安装工具-更改libpq.5.dylib/Library/PostgreSQL/10/lib/libpq.5.dylib/Users/simon/.pyenv/versions/flaskapp/lib/python3.8/site-packages/psycopg2//psycopg.cpython-38-darwin.so```
这解决了这个问题,但是每次我在虚拟环境中删除并重新安装依赖项后,都必须重复此操作
目前,我已将/Library/PostgreSQL/10/lib/libpq.5.10.dylib
放在/usr/local/lib
中,并设置了一个符号链接。这样,每次在虚拟环境中删除/刷新软件包时,我就不用再使用安装名称工具了
我的问题是:
我不确定哪些程序使用/usr/lib/libpq.5.6.dylib。在macOS Catalina上,有没有办法找到哪些程序使用此库?它可能是旧的PostgreSQL 9.6安装中的遗留程序??因此我可能可以删除它,尽管在Catalina中,我不确定如何绕过不允许的操作
上面我对install\u name\u工具的使用是否正确?或者是否有更好的方法使我不必在每次刷新虚拟环境后都重新运行该命令