2015-10-20 49 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

太棒了,很高興我可以幫助:-)謝謝你讓我知道。 –