Python setup.py:缺少一些文件

sma*_*art 5 python pip package python-wheel

我的项目结构如下所示:

package1/  # a lot of files, submodules here.
package2/  # a lot of files, submodules here.
package3/  # a lot of files, submodules here.
tests/
setup.py
Run Code Online (Sandbox Code Playgroud)

我有一个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']}
)
Run Code Online (Sandbox Code Playgroud)

我按以下方式使用它:

python setup.py bdist_wheel -d .
Run Code Online (Sandbox Code Playgroud)

之后,我通过以下方式安装它:

pip install MyPackage-1.1.0.whl
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但是...

安装到虚拟环境后,我发现package2. 它看起来类似于:

package2/
    http/
        api/
            http.py
            api.yaml
            ...
Run Code Online (Sandbox Code Playgroud)

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

所以,问题是:这怎么可能?有人有什么想法吗?

更新:

我发现所有非Python文件都丢失了......

phd*_*phd 6

package_data={
    'package': ['./path/*.xsd'],
},
Run Code Online (Sandbox Code Playgroud)

字典的键必须是您的真实包名称。值必须是要包含的模式列表。要包含 package2/http/api/api.yaml:

package_data={
    'package2': ['http/api/*.yaml'],
},
Run Code Online (Sandbox Code Playgroud)

列出所有非 python 文件和模式。

另一种方法是创建 MANIFEST.in (通常用于源代码分发)并添加

include_package_data=True,
Run Code Online (Sandbox Code Playgroud)

setup()