2014-04-28 63 views
1

我正在研究一個由庫模塊和兩個使用該庫的腳本組成的Python包。其中一個腳本是打印出一些文本的命令行工具,另一個是JSON API服務器。這兩個腳本也可以作爲開發人員使用該庫的示例。Python包裝:迎合不同的受衆

鑑於這種情況下,我看到三個主要的受衆羣體或使用案例包:

  1. 圖書館用戶:需要主模塊。可能需要訪問用於測試模塊的腳本以及作爲自己代碼的存根和示例。

  2. CLI用戶:希望立即運行CLI腳本。不需要API服務器,並且可能不關心對腳本源的訪問。

  3. API提供程序:與CLI用戶相同,但具有API服務器腳本。可能需要CLI腳本進行快速測試。

理想情況下,腳本的用戶也可以選擇是否要直接從目錄或從他們的$ PATH運行的腳本。

我該如何在目錄樹和一個或多個分發包(可能使用setuptools)中正確地構造它?

電流源的佈局是這樣的:

main_folder 
    README 
    setup.py 
    mypackage 
     __init__.py # contains the library functions 
     mymodule.py # link to __init__.py for easy import in the scripts 
     cli.py 
     api_server.py 

回答

1

這裏就是我現在這樣。

我瀏覽了PyPI尋找類似的軟件包,然後看看wikidump的目錄結構和它的setup.py

在那裏我發現了entry_points參數,它允許指定將在構建時轉換爲腳本的模塊函數。這些腳本也可能有額外的依賴關係。

爲此,我將各自的__main__塊轉換爲命名函數,並將它們標記爲入口點。相關的塊(所有setuptools.setup()參數)看起來是這樣的:

[...] 
    requires=['pyswisseph', 'numpy'], 
    extras_require={'Flask':['flask']}, 
    entry_points={ 
     'console_scripts': 
      ['cerridwen = cerridwen.cli:main', 
      'cerridwen-server = cerridwen.api_server:main [Flask]'] 
    } 
    [...] 

每個人都得到模塊和腳本,但只有在需要它們的腳本運行的第一次的可選的依賴將被安裝。腳本邏輯也將作爲主模塊的一部分進行安裝,以便每個人都可以根據需要使用其輔助函數。

至於以腳本爲例,我打算在項目的網站上引用他們的github源代碼。

目錄結構保持其原始狀態。我希望幫助別人:)