2010-06-06 51 views
5

我對Python生態系統很陌生,並且對模塊編輯有疑問。從任意VCS存儲庫安裝python模塊的最佳實踐

我使用一堆第三方模塊,分佈在PyPi上。來自C和Java背景,我喜歡easy_install <whatever>的易用性。這是一個新的,美好的世界,但該模型打破了,當我想編輯新安裝的模塊有兩個原因:

  1. egg文件可以存儲在一個文件夾或歸檔的文件系統中的某個瘋狂英寸
  2. 使用egg似乎排除使用原始項目的版本控制系統,就像使用debian軟件包阻止源於原始VCS存儲庫的開發一樣。

從任意VCS存儲庫安裝模塊的最佳做法是什麼?我希望能夠在其他腳本中繼續使用import foomodule。如果我修改模塊的源代碼,我是否需要執行任何其他命令?

回答

2

你想開發,但開發版本被系統處理爲雞蛋(例如獲取入口點)嗎?如果是這樣,那麼你應該檢查出的來源和做用Development Mode:如果項目恰好不是一個setuptools的基礎項目,這是需要針對上述情況,一個快速的解決辦法是此命令

python setup.py develop 

python -c "import setuptools; execfile('setup.py')" develop 

幾乎所有你想知道的一切setuptools的(easy_install的基礎)可從該setuptools docs。還有docs for easy_install

開發模式將項目添加到導入路徑中,方式與easy_install相同。下次導入模塊時,您所做的更改將可用於您的應用程序。

正如其他人所提到的,如果您只想獲取最新版本而無需編輯,您也可以直接使用版本控制URL,但這隻會拍攝快照,並且確實會創建一個正常的蛋過程的一部分。我知道它確實是Subversion,我認爲它做了其他,但我找不到文檔。

+0

完美,正是我想要的:)謝謝。 – fmark 2010-06-07 01:40:30

1

您可以使用PYTHONPATH environment variable或將代碼符號鏈接到站點包中的某個位置。

+0

我到底加了什麼「PYTHONPATH」?包含「__init __。py」的文件夾? – fmark 2010-06-06 23:44:49

1

easy_install安裝的軟件包通常來自開發人員版本控制的快照,通常在開發人員發佈正式版本時進行。因此,您將不得不通過easy_install進行方便的自動下載,並通過版本控制進行最新的代碼更新。如果選擇後者,則可以通過運行python setup.py install直接從版本控制檢出中構建並安裝在python包索引中看到的大多數包。

如果您不喜歡默認安裝目錄,則可以改爲安裝到自定義位置,並導出PYTHONPATH環境變量,其值是已安裝軟件包的父文件夾的路徑。

+0

我選擇後者的選項。如果我反覆修改源代碼,是否需要在每次修改後重新運行'python setup.py install',或者只修改一次? 'python setup.py install'是做什麼的? – fmark 2010-06-07 00:08:57

+0

這取決於包裝。如果一個軟件包被設計爲可用於新版本控制而無需構建/安裝步驟,那麼您可以將「PYTHONPATH」指向簽出目錄的父目錄。否則,在安全導入之前,您將不得不構建並安裝它。 'python setup.py install'告訴一個用setuptools或distutils構建的包來構建它自己,並將這些構建的文件安裝到系統通常位置,以便加載python包。這裏是一些文檔:http://docs.python.org/distutils/ – 2010-06-07 00:13:38

3

Pip可讓您安裝文件,提供Subversion,git,Mercurial或bzr存儲庫的URL。

pip install -e svn+http://path_to_some_svn/repo#egg=package_name 

例子: 如果我想下載最新版本的cmdutils PIP安裝-e汞柱+ https://[email protected]/ianb/cmdutils#egg=cmdutils

。 (隨機包我決定拉)。

我將其安裝到virtualenv(使用-E參數)中,並且pip將cmdutls安裝到我的virtualenv文件夾頂層的src文件夾中。

pip install -E thisIsATest -e hg+https://[email protected]/ianb/cmdutils#egg=cmdutils 

$ ls thisIsATest/src 
cmdutils 
+1

這下載到源代碼到哪裏?如果我修改'svn'下載的源代碼,我是否需要運行任何命令? – fmark 2010-06-07 00:23:14

+0

我已經更新了我的答案和更多信息(包括對該問題的回答) – RyanWilcox 2010-06-07 01:28:35