2017-05-22 19 views
0

我正在嘗試使用setup.py和setuptools爲我的項目構建一個包。一般的搜索建議數據文件應該放在我的python包下。
例如,project/src/package/data。我的情況更符合this question安裝數據文件的完整目錄

我的項目包含一個Python控制檯應用程序和一個HTML交互式應用程序。現在(在setup.py之前),我有控制檯應用程序使用特殊命令將HTML文件複製到特定目錄。我在源代碼管理中關注這個目錄結構。

project 
|-+ console 
| |-+ package 
|  |-- __init__.py, etc. 
|-+ viz 
    |-+ css 
    |-+ js 
    |-- index.html 

我不知道怎麼這種行爲可以setup.py和雞蛋的文件進行復制。

  1. 如何確保viz將被打包? package_data選項似乎是相對於一個包(暗示viz應放置在一個包中)。因此,package_data = {'': ['viz/*']}是不是我所期待的。

  2. 提取是如何完成的?
    我是否應該使用pkg_resources.resource_filenameviz放入緩存中,然後shutil將文件複製到預定位置?有更實用的選擇嗎?

回答

0

考慮改變整個結構和車削viz成包,移動有安裝它,以及代碼。結果會是這樣。

project 
|-- setup.py 
|-+ top-level-package 
    |-- __init__.py 
    |-+ console 
    | |-- __init__.py, etc. 
    |-+ viz 
     |-+ css 
     |-+ js 
     |-- index.html 
     |-- __init__.py 

雖然這會工作,我發現an answer的實際工作爲我的初衷。 setup.py必須將文件遞歸複製爲package_data(並且相對路徑與..一起使用)。

def package_files(directory): 
    paths = [] 
    for (path, directories, filenames) in os.walk(directory): 
     for filename in filenames: 
      paths.append(os.path.join("..", path, filename)) 
    return paths 

extra_files = package_files("viz") # this is relative to the project root 

setup(
    ..., 
    package_data = {"mypackage": extra_files} 
) 

我只是暈倒原來consolepackage爲一體,所以Python包項目的根目錄下直接坐。這是我最後的結構。

project 
|-- setup.py 
|-+ package 
| |-- __init__.py, etc. 
| |-+ private 
|  |-- ... 
|-+ viz 
    |-+ css 
    |-+ js 
    |-- index.html 
相關問題