2012-01-17 57 views
9

我有一個項目,我想從中生成兩個獨立的python包。我想用pip安裝這些軟件包。使用多個setup.py腳本的多個項目?

在回答這個前面的問題,一般的建議是寫兩個setup.py腳本:Multiple projects from one setup.py?

所以,我想是這樣的結構:

/myproject 
    setup_foo.py 
    setup_bar.py 
    /mypackage1 
    /mypackage2 
    ... 

setup_foo.py我設置script_name參數:

from distutils.core import setup 
setup(name = 'foo', 
     version = '2.0.0', 
     ..., 
     script_name = 'setup_foo.py') 

(我也嘗試了下面沒有參數 - 根據th出入口文件默認爲sys.argv中[0])

我使用

python setup_foo.py sdist 

創建foo-2.0.0.tar.gz但是,當我pip install foo-2.0.0.tar.gz,我得到這樣一個錯誤:

Unpacking .../foo-2.0.0.tar.gz 
Running setup.py egg_info for package from file:///...foo-2.0.0.tar.gz 
Traceback (most recent call last): 
    File "<string>", line 14, in <module> 
IOError: [Errno 2] No such file or directory: '/var/folders/wj/jv7n2pmn5d1g1jjx6khc8bx80000gn/T/pip-v3dujq-build/setup.py' 
Complete output from command python setup.py egg_info: 
Traceback (most recent call last): 
File "<string>", line 14, in <module> 
IOError: [Errno 2] No such file or directory: 
'/var/folders/wj/jv7n2pmn5d1g1jjx6khc8bx80000gn/T/pip-v3dujq-build/setup.py' 

我錯過了一些指導pip使用setup_foo.py的方法?還是應該將兩個名爲'setup.py'的腳本放在不同的目錄中?

回答

6

問題是爲什麼你把這些項目放到一個目錄中。我的建議是將它們分開,然後通過「setup.py develop -U」將它們添加到共享的virtualenv中。在那裏,做到了,做得很好。

否則,你的下一個問題將是共享一個「setup.cfg」,「MANIFEST.in」等。一般來說,你會有很多不必要的痛苦,每次你打破setuptools/distribute的假設。

您選擇上述結構,使這兩個包在Python路徑自動的,在「發展-U」使其明確,並註明「進口這種」:

明確優於隱式的。

+0

感謝您的回答!你選擇我所說的結構的理由幾乎是正確的;我有兩個人。首先,我使用PyDev/Eclipse,並希望儘可能避免項目間依賴關係。其次,我的兩個發行版共享項目中幾乎所有的包 - 它們主要區別於包含哪些命令行工具 - 因此將它們分成兩個或三個單獨的項目似乎有點過分。如果一個項目中的兩個發行版以錯誤的方式磨損setuptools,我可能會選擇只有一個發行版,並接受在所有服務器上部署所有腳本。 – 2012-01-17 21:08:49

+1

請參閱http://code.google.com/p/pyroscope/source/browse/trunk/update-to-head.sh獲取一些靈感。如果您安裝到virtualenv(即使是在生產機器上也是一個好主意),您可以選擇性地對工具存根進行符號鏈接,從而發佈選定的子集(請參閱「ln -nfs $(grep -l'entry_point。* pyrocore =='$ PWD/bin/*)$ {BIN_DIR: - 〜/ bin} /「命令)。 – pyroscope 2012-01-18 22:13:58

+0

聰明!是的,這是一個更簡單的方法來隱藏/發佈sripts子集。 – 2012-01-20 15:59:16

0

看起來像setuptools不支持沒有命名setup.py的安裝腳本,與distutils相反。我認爲最好將bug報告給setuptools(bugs.python.org/setuptools)並分發(在bitbucket上)開發者。

+1

它可能是一個功能,而不是一個bug ......問題是「script_name」應該具有什麼效果。文件不是特別清楚。 – 2012-01-20 16:01:00

+0

distutils文檔僅包含以下內容:http://docs.python.org/distutils/apiref#distutils.core.run_setup – 2012-01-30 16:44:32