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文件都丢失了......
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()。