Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
macOS Catalina上Python3冲突的动态库依赖性问题;_Python_Python 3.x_Macos_Dynamic Linking_Dylib - Fatal编程技术网

macOS Catalina上Python3冲突的动态库依赖性问题;

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

我有一个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的链接
  • /usr/lib/libpq.5.dylib->链接到/usr/lib/libpq.5.6.dylib
  • 当我尝试导入库时,
    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。有什么方法可以找到吗
    我最初的想法是尝试将/usr/lib/libpq.5.dylib中的符号链接更新为/Library/PostgreSQL/10/lib/libpq.5.dylib。但是,在macOS Catalina中,我在控制台中接收到允许的
    操作
    。在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工具的使用是否正确?或者是否有更好的方法使我不必在每次刷新虚拟环境后都重新运行该命令