Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.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
从单个共享库文件创建用于分发的python模块_Python_Distutils - Fatal编程技术网

从单个共享库文件创建用于分发的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创建

我有一个使用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创建此文件

我无法使共享库进入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
包的需求,并且您的导入将在默认情况下工作。