2011-10-28 47 views
1

我做了一個項目,這個佈局:製作一個Python包PIP一些data_files

project/ 
    bin/ 
     my_bin.py 
    CHANGES.txt 
    docs/ 
    LICENSE.txt 
    README.txt 
    MANIFEST.in 
    setup.py 
    project/ 
     __init__.py 
     some_thing.py 
     default_data.json 
     other_datas/ 
      default/ 
       other_default_datas.json 

而問題是,當我安裝此使用PIP,它把「default_data.json」「other_datas」在同一個地方作爲應用程序的其餘文件夾沒有。

我怎麼做才能讓他們在同一個地方?

他們最終在「/home/user/.virtualenvs/proj-env/project」

,而不是「/home/user/.virtualenvs/proj-env/lib/python2.6 /站點包/項目」

在我做這樣的setup.py:

inside_dir = 'project' 
data_folder= os.path.join(inside_dir,'other_datas') 

data_files = [(inside_dir, [os.path.join(inside_dir,'default_data.json')])] 
for dirpath, dirnames, filenames in os.walk(data_folder): 
    data_files.append([dirpath, [os.path.join(dirpath, f) for f in filenames]]) 

回答

2

https://docs.python.org/3.4/distutils/setupscript.html#installing-additional-files

如果目錄是相對路徑,它是相對於安裝前綴(Python的sys.prefix爲純Python解釋包,sys.exec_prefix包含擴展模塊的包)。

每個文件名文件相對於setup.py腳本在包源分佈的頂部解釋。

所以描述的行爲就是data_files如何工作。

如果你希望在你的包中的數據文件,你需要使用package_data代替:

package_data={'project': ['default_data.json', 'other_datas/default/*.json']} 
0

更改MANIFEST.in包括那些.json

這可能是要去工作:

recursive-include project/ *.json 
+0

已經有在清單和文件準備,但在錯誤的文件夾中。 – Arruda

+0

爲什麼這個答案被標記爲接受,如果評論表明沒有工作? – tobib