Python包取决于XML文件

时间:2015-10-20 20:08:05

标签: python xml pip

我创建了一个需要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'>

有谁知道什么可能是错的?我无法弄明白这一点。

1 个答案:

答案 0 :(得分:1)

您需要在setuptools发行版中明确包含任何不是Python源代码(*.py)的资源。

有几种方法可以做到这一点。我建议您使用include_package_data = True函数中的setup()MANIFEST.in文件的组合。

因此,假设您的发布版本为my.package/my/package(即没有中间srclib目录),您可以使用以下内容:

<强> 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__技巧或其他路径黑客攻击,它不适用于某些平台或拉链蛋。)