2015-10-20 50 views
0

我创建了一个需要XML文件的私有Python包。当我在CircleCi本地运行包时,一切都很好。现在,当我运行安装包作为依赖的代码,我不断收到一个错误:取决于XML文件的Python包

<urlopen error [Errno 2] No such file or directory: '/home/ubuntu/virtualenvs/venv-system/local/lib/python2.7/site-packages/...../metadata_wsdl.xml'> 

有谁知道什么地方出错了?我一直无法弄清楚这一点。

+0

你是否在virtualenv之外安装/运行你的软件包?如果是的话,这可能不会奏效 - 路径问题。 – keda

回答

1

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

有几种方法可以做到这一点。我推荐的一个是在你的setup()函数中使用include_package_data = TrueMANIFEST.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关于可用方法的详细信息,包括数据文件,The MANIFEST.in template关于如何定义MANIFEST更多信息。

一旦您成功地将数据文件包含在您的发行版中,则应确保使用ResourceManager API从您的代码中访问它们(而不是__file__欺骗或其他路径攻击,这些攻击在某些平台上不起作用或压缩的鸡蛋)。

+0

这工作完美,谢谢! –

+0

太棒了,很高兴我可以帮助:-)谢谢你让我知道。 –