Python的setup.py:一些文件缺失。

5

我的项目结构如下:

package1/  # a lot of files, submodules here.
package2/  # a lot of files, submodules here.
package3/  # a lot of files, submodules here.
tests/
setup.py

我有一个类似于 setup.py 的测试:

setup(
    name='MyPackage',
    packages=find_packages(exclude=['tests']),
    package_data={
        'package': ['./path/*.xsd'],
    },
    include_package_data=True,
    py_modules=['package1'],
    version=__version__,
    description='My description',
    classifiers=[
        'Programming Language :: Python :: 2.7',
        'Programming Language :: Python :: 3',
    ],
    zip_safe=False,
    author='Me',
    author_email='example@example.com',
    url='http://www.example.com/',
    keywords=['Keyword1', 'Keyword2'],
    scripts=['./script1.py', './script2.py'],
    install_requires=[
        'isodate',
        'pycurl',

    ],
    extras_require={':python_version < "3.0"': ['enum34', 'future']}
)

我是这样使用它的:

python setup.py bdist_wheel -d .

之后,我会通过以下方式进行安装:

pip install MyPackage-1.1.0.whl

它能正常工作,但是...

在虚拟环境中安装后,我发现package2缺少一个配置文件。这个配置文件看起来类似于:

package2/
    http/
        api/
            http.py
            api.yaml
            ...

有趣的是,这个包中存在http.py和其他文件,但是api.yaml在某个地方消失了。

所以问题是:这可能是如何发生的,有人有任何想法吗?

更新:

我发现所有非Python文件都不见了...

1个回答

6
package_data={
    'package': ['./path/*.xsd'],
},

字典的键必须是您真实的包名。值必须是包含模式的列表。要包含 package2/http/api/api.yaml:
package_data={
    'package2': ['http/api/*.yaml'],
},

列出所有非Python文件和模式。
另一种方法是创建MANIFEST.in(通常用于源分发)和add
include_package_data=True,

setup() 中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接