从单个共享库文件创建用于分发的python模块
我有一个使用pybind11创建的共享库 叫dddd.so 当我打开python并键入从单个共享库文件创建用于分发的python模块,python,distutils,Python,Distutils,我有一个使用pybind11创建的共享库 叫dddd.so 当我打开python并键入 import dddd print(dddd.test_function()) 我得到了我想要的结果,这太棒了 但是,我的目标是创建一个conda可安装包,以便创建一个conda环境,然后键入: conda install dddd 还有那份工作 因此,我试图创建一个setup.py文件,该文件允许我使用python setup.py bdist或python setup.py bdist_conda创建
import dddd
print(dddd.test_function())
我得到了我想要的结果,这太棒了
但是,我的目标是创建一个conda可安装包,以便创建一个conda环境,然后键入:
conda install dddd
还有那份工作
因此,我试图创建一个setup.py文件,该文件允许我使用python setup.py bdist或python setup.py bdist_conda创建此文件
我无法使共享库进入bdist模块
我目前的目录结构是
dddd/
- dddd/
-dddd.so
-__init__.py
setup.py
我试过很多东西,包括
,但我一直没能让它工作
当我尝试将此作为我的setup.py时:
from distutils.core import setup
setup(
name='dddd',
version='0.2',
packages=['dddd'],
package_dir={'dddd': 'dddd'},
package_data={'dddd': ['dddd.so']},
)
我能够让python setup.py bdist_conda工作
但是,当我运行此conda模块时,我的模块现在无法直接访问,我必须执行以下操作:
import dddd.dddd
dddd.dddd.test_function()
这不是我想要的
在我的链接中,我似乎无法实现答案中所实现的功能。为什么将此标记为
C++
和pybind11
?因此它是一个预编译的共享对象。通过添加一个\uu init\uuuuuuuuuuuuuuuuupy
将ddddd
添加到setup.py
中的packages
列表中,并通过package\u数据包含ddddd.so
,如您链接的问题中所述<当您拥有共享库的源代码并在构建发行版时将其编译为共享对象时,将使用“代码>扩展”
s。@hoefling谢谢,已使用package_数据进行更新,但似乎无法直接访问我的模块这正是链接问题中所做的。如果您想将共享对象直接放置到站点包中,那么最好是通过声明扩展来从C源代码构建它。您只能将python模块或Extension
s放置在站点包根目录中;虽然有一些(黑客)方法可以避免这种情况,但它们都有例外,并且不会在所有情况下都起作用。当然,这是一个主要的缺点,因为您需要在更改时保持\uuuu init\uuuuuuuuuuuy
的一致性;但是为什么不通过配置扩展来从C源代码构建共享对象呢?这是最简单的方法。如果您需要在dddddd
中预先构建共享对象进行开发,您可以始终通过python setup.py build\u ext
构建一个共享对象。然后,您还可以完全消除对dddd
包的需求,并且您的导入将在默认情况下工作。