0

我在本地机器上使用 cxfreeze(在 python3.2 virtualenv 中)构建了一个可执行文件。可执行文件在本地机器上正确运行。

我正在尝试在单独的目标机器(具有相同的操作系统和架构)上运行可执行文件,但出现以下错误:

  ...
  File "/home/chris/.virtualenvs/python3env/lib/python3.2/site-packages/psycopg2/__init__.py", line 67, in <module>
  File "ExtensionLoader_psycopg2__psycopg.py", line 18, in <module>
  ImportError: No module named None

在目标机器上满足所有共享库依赖项(根据ldd)。

根据跟踪我的猜测是 psycopg2 正在尝试加载共享库_psycopg.cpython-32mu.so(本地python3.2/site-packages/psycopg2/_psycopg.cpython-32mu.so)但在运行时找不到它。

我尝试将库与可执行文件放在同一目录中并设置 LD_LIBRARY_PATH,但都没有解决(假设的)问题。

4

1 回答 1

0

在每个进程上运行后strace,似乎是纯python版本正在寻找文件_psycopg.cpython-32mu.so

open("/home/chris/.virtualenvs/python3env/lib/python3.2/site-packages/psycopg2/_psycopg.cpython-32mu.so", O_RDONLY|O_CLOEXEC) = 8

而 cxfreeze 构建的二进制文件正在寻找文件psycopg2._psycopg.so

open("/path/to/psycopg2._psycopg.so", O_RDONLY|O_CLOEXEC) = 3

md5sum显示这些文件是相同的,因此 cxfreeze 进程似乎更改了动态库的预期名称。值得注意的是,该库的一个版本正确地命名为目标包含distcxfreeze 输出的目录中。

于 2013-01-09T16:59:44.147 回答