我在本地计算机上使用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,但都没有解决(假设)问题。
答案 0 :(得分: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进程似乎更改了动态库的预期名称。值得注意的是,cxfreeze输出的dist
目录中包含了此库的正确名称的正确名称。