【发布时间】:2012-04-05 10:49:12
【问题描述】:
我是 distutils 的新手,但我遇到了一个真正让我陷入困境的问题。我正在编译一个需要扩展的包,所以我做了扩展:
a_module = Extension(
"amodule",
["initmodule.cpp"],
library_dirs=libdirs,
extra_objects = [
"unix/x86_64/lib/liba.so"
"unix/x86_64/lib/lib.so",
"unix/x86_64/lib/libc.so"],
)
然后我运行设置方法:
setup(name="apackage", version="7.2",
package_dir = {'':instdir+'/a/b/python'},
packages=['apackage','package.tests'],
ext_modules=[hoc_module]
)
包分发正确,我可以“python setup.py install”很好,但是当我尝试导入我的包时出现错误
ImportError: liba.so.0: cannot open shared object file: No such file or directory
我意识到当我将 liba.so.0 的位置添加到我的 LD_LIBRARY_PATH 时,程序运行良好。不幸的是,我没有编写这些模块,也没有很好地理解编译。这几天我一直在想办法,但无济于事。
更新:我尝试将 liba.a、libb.a 等文件传递给 extra_objects 但这不起作用,产生以下错误:liba.a: could not read symbols: Bad value collect2: ld 返回 1 个退出状态。我要做的是打包一个python模块,该模块需要编译一个库,该库本身依赖于我需要以某种方式包含在包中的其他库。我怀疑我的问题与这个非常相似:http://mail.python.org/pipermail/distutils-sig/2009-February/010960.html但是那个没有解决,我想也许因为它已经有两年了,所以找到了解决方案?
更新 2:现在我已经解决了这个问题:
data_files=[('/usr/local/lib', glob.glob('unix/x86_64/lib/*'))]
也就是说,我正在将我需要的库复制到/usr/local/lib 中。然而,我对这个解决方案并不十分满意,尤其是因为它要求我的用户具有 root 权限,而且这可能仍然无法在 Redhat 发行版中运行。因此,如果有人可以提出比此修复更好的建议,请告诉我。
【问题讨论】:
标签: python distribution packaging distutils software-distribution