我创建了一个需要XML文件的私有Python包。当我在本地和CircleCi上运行包时,一切都很好。现在,当我运行将程序包作为依赖项安装的代码时,我不断收到错误:
<urlopen error [Errno 2] No such file or directory: '/home/ubuntu/virtualenvs/venv-system/local/lib/python2.7/site-packages/...../metadata_wsdl.xml'>
有谁知道什么可能是错的?我无法弄明白这一点。
答案 0 :(得分:1)
您需要在setuptools发行版中明确包含任何不是Python源代码(*.py
)的资源。
有几种方法可以做到这一点。我建议您使用include_package_data = True
函数中的setup()
和MANIFEST.in
文件的组合。
因此,假设您的发布版本为my.package/my/package
(即没有中间src
或lib
目录),您可以使用以下内容:
<强> setup.py
强>
from setuptools import setup, find_packages
setup(
...
packages = find_packages('my'), # include all packages under my/
include_package_data = True, # include everything in source control
# or included in MANIFEST.in
)
<强> MANIFEST.in
强>
recursive-include my *
recursive-include docs *
global-exclude *.pyc
global-exclude ._*
global-exclude *.mo
这将递归地包含my.package/my/
以下my.package/docs/
以下的任何类型的文件,并全局排除已发布版本中不需要的其他类型的文件。
有关包含数据文件的可用方法的详细信息,请参阅Building and Distributing Packages with Setuptools » Including Data Files;有关如何定义MANIFEST
的更多信息,请参阅The MANIFEST.in template。
成功将数据文件包含在发行版中后,应确保使用ResourceManager
API从代码中访问它们(而不是__file__
技巧或其他路径黑客攻击,它不适用于某些平台或拉链蛋。)