如何使用setuptools构建包含运行库的Python包?
背景:如何使用setuptools构建包含运行库的Python包?,python,swig,setuptools,Python,Swig,Setuptools,背景: from setuptools import setup, find_packages, Extension application_module = Extension( '_core', ) setup( name='foo_mod', version='0.1', author="My Name", email="my.name@company.com", description="""Simple example""",
from setuptools import setup, find_packages, Extension
application_module = Extension(
'_core',
)
setup(
name='foo_mod',
version='0.1',
author="My Name",
email="my.name@company.com",
description="""Simple example""",
ext_modules=[application_module],
packages=find_packages(),
package_data={
"" : ['libs/*.dll']
},
py_modules=['core'],
python_requires='>=3.6')
PS > python setup.py build_ext --build-lib .\foo_mod
PS > python setup.py sdist bdist_wheel
我使用SWIG为C/C++库开发了Python包装器
现在我需要使用setuptools
来打包项目以供分发。包需要包括SWIG生成的C扩展和所有DLL依赖项。我的项目目录如下所示:
project_directory/
|
--- foo_mod/
| |
| --- __init__.py
|
--- libs/
| |
| --- lib_a.dll
| --- lib_b.dll
|
--- core.py (generated by SWIG)
--- core_wrap.cxx (generated by SWIG)
--- core_wrap.h
--- setup.py
我尝试过的:
from setuptools import setup, find_packages, Extension
application_module = Extension(
'_core',
)
setup(
name='foo_mod',
version='0.1',
author="My Name",
email="my.name@company.com",
description="""Simple example""",
ext_modules=[application_module],
packages=find_packages(),
package_data={
"" : ['libs/*.dll']
},
py_modules=['core'],
python_requires='>=3.6')
PS > python setup.py build_ext --build-lib .\foo_mod
PS > python setup.py sdist bdist_wheel
生成扩展的命令:
from setuptools import setup, find_packages, Extension
application_module = Extension(
'_core',
)
setup(
name='foo_mod',
version='0.1',
author="My Name",
email="my.name@company.com",
description="""Simple example""",
ext_modules=[application_module],
packages=find_packages(),
package_data={
"" : ['libs/*.dll']
},
py_modules=['core'],
python_requires='>=3.6')
PS > python setup.py build_ext --build-lib .\foo_mod
PS > python setup.py sdist bdist_wheel
执行此命令后,python扩展名\u core.pyd
将写入foo\u mod\
生成包的命令:
from setuptools import setup, find_packages, Extension
application_module = Extension(
'_core',
)
setup(
name='foo_mod',
version='0.1',
author="My Name",
email="my.name@company.com",
description="""Simple example""",
ext_modules=[application_module],
packages=find_packages(),
package_data={
"" : ['libs/*.dll']
},
py_modules=['core'],
python_requires='>=3.6')
PS > python setup.py build_ext --build-lib .\foo_mod
PS > python setup.py sdist bdist_wheel
问题:
\u core.pyd
扩展名和libs未包含在控制盘中
问题:
如何将库依赖项正确地包含到包中?1。AFAIK
package\u data
不能包含空字符串的文件,它应该是包含在分发中的包名(=包含在packages
列表中)。2.\u core.pyd
可能不包括在内,因为您已将扩展名命名为\u core
,但正在将库放入foo\u mod
-在这种情况下,扩展名应为foo\u mod.\u core
。但是我可能错了-请将问题填写到a,以便在本地复制。@hoefling 1)从中,空字符串用于将关联规则应用于find\u packages
找到的所有包。2) 看来我错了。setuptools
正在检测并包含.pyd。DLL是我唯一无法找到并包含的。是的,我明白了。我猜错误是您的libs
目录不属于任何包,请将其移动到foo_mod
目录中进行修复。1。AFAIKpackage\u data
不能包含空字符串的文件,它应该是包含在分发中的包名(=包含在packages
列表中)。2.\u core.pyd
可能不包括在内,因为您已将扩展名命名为\u core
,但正在将库放入foo\u mod
-在这种情况下,扩展名应为foo\u mod.\u core
。但是我可能错了-请将问题填写到a,以便在本地复制。@hoefling 1)从中,空字符串用于将关联规则应用于find\u packages
找到的所有包。2) 看来我错了。setuptools
正在检测并包含.pyd。DLL是我唯一无法找到并包含的。是的,我明白了。我猜错误是您的libs
目录不属于任何包,请将其移动到foo_mod
目录中进行修复。