2013-09-27 43 views

回答

273

python setup.py install用於安裝(通常是第三方),你沒有將開發/編輯/調試自己的包。

對於你自己的東西,你想要得到你的包安裝,然後能夠經常編輯代碼和必須重新安裝你的包,這正是python setup.py develop做:安裝包(通常只一個源文件夾),以便您可以在安裝到(虛擬)環境後方便地編輯代碼,並使更改立即生效。

注意,強烈建議使用pip install .(安裝)和pip install -e .(開發商安裝),安裝包,直接調用setup.py會做許多依賴錯誤的東西像拉prereleases和不兼容的封裝版本,使打包很難用pip卸載。

+56

埃裏克是正確的。另外有用的知道是'setup.py develop'帶有一個'--uninstall'選項,當你完成黑客入侵時。 – philadams

+5

最後想到的是,在黑客攻擊python軟件包時,另一種「setup.py develop'選項是使用」簡單(但顯式)的路徑修改來正確解析軟件包「[Kenneth Reitz](http:// kennethreitz。 org/repository-structure-and-python /) – philadams

+2

我遇到了一些問題,使用'python setup.py develop'嘗試爲本地開發設置Ceilometer。我結束了爲了使用'PIP安裝-e PATH'(一個的virtualenv內),以避免[經由'easy_install'冒出問題](https://ask.openstack.org/en/question/87376/unable-to -setup-雲高計合發展模式/)。 –

77

documentation。該develop不會安裝軟件包,但它會在部署目錄中創建一個.egg-link回項目源代碼目錄。

所以這就像安裝,而不是複製到site-packages它增加了一個符號鏈接(.egg-link充當多平臺符號鏈接)。

這樣你可以編輯源代碼並直接看到更改沒有每次你做一點改變都必須重新安裝。當您是該項目的開發人員時,這非常有用,因此名稱爲develop。如果你只是安裝別人的包,你應該使用install

10

另一件事,人們可能會發現有用的時候使用develop方法是--user選項安裝沒有sudo。例如:

python setup.py develop --user 

,而不是

sudo python setup.py develop 
+3

IIUC你不應該在你的系統中「setup.py develop」,這隻有在virtualenv纔有意義。 – dividebyzero

+2

@dividebyzero你的意思是你應該總是使用'python setup.py develop --user',如果我理解正確嗎?另外,你能否使用'python setup.py develop --user'告訴我軟件包的安裝位置?謝謝! –

+2

我認爲'--user'會安裝在您家庭帳戶的目錄中,並且不會影響系統中的其他用戶。 'develop'將鏈接到您的項目源目錄,而不是實際上覆制所有內容。 'develop --user'應該可以,並且也可以在virtualenv中開發。只有對實際系統進行「開發」纔是奇怪的,因爲您可能讓其他用戶在項目源代碼的個人副本中使用指向該項目的東西。 – dividebyzero