如何使用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。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
目录中进行修复。