2010-05-02 44 views
1

我正在爲要安裝在異構資源集上的python模塊配置基於distutils的setup.py。由於異構性,每個主機上安裝模塊的位置都不相同,但disutils會選擇主機特定的位置。python模塊的設置權限(python setup install)

我發現該模塊安裝時沒有使用disutils的o + rx權限(儘管在運行setup.py之前設置了umask)。一個解決方案是手動糾正這個問題,但是我想要一個可以在異構安裝目標上工作的自動化方法。

例如,有沒有一種方法可以從setup.py中提取安裝的結束位置?

其他建議?

回答

0

我對disutils並不是很瞭解,但我猜測如果你深入研究,直到找到寫入文件的地方,那麼你會在該行看到路徑變量。

this page可以幫助你

0

os.path.dirname(__ FILE__)可能是你在找什麼。模塊中的__file__返回模塊加載的路徑。

假設yourmodule是含有Something.py一個文件夾,在setup.py:

import os 
#setup(...) call here 
from yourmodule import Something 
print os.path.dirname(Something.__file__) 

唯一的皺紋用這將是,如果你的文件結構具有yourmodule在同一目錄作爲setuputils。在這種情況下,python加載器會優先加載yourmodule.Some當前目錄。

兩個有點hackish的,但有效的選擇顛覆,可能是要麼

  1. 從Python路徑刪除當前目錄下,迫使其從現在的站點包存在的文件加載:

    進口SYS 的sys.path = sys.path中[1:]

  2. 導入語句之前臨時重命名文件夾yourmodule。

對於選項1,整個事情是:

import os 
import sys 

#setup(...) call here 

#Remove first entry in sys.path which is current folder (probably impl dependent, but for practical purposes is consistent) 
sys.path = sys.path[1:] 
from yourmodule import Something 
print os.path.dirname(Something.__file__) 

我只是用我的setup.py的一個測試,這和它的偉大工程。祝你好運!

0

我發現模塊,而無需使用disutils

我不記得現在O + RX權限安裝,如果distutils的副本和他們的權利的文件,或者是如果它只是複製內容。

(儘管在運行設置之前設置了umask。py)

我不知道如何從Python的umask和文件複製應該交互; umask是否適用於系統調用,還是需要通過Python代碼明確注意?

例如,有沒有辦法從setup.py中提取安裝 的結束位置?

有一個,有點複雜。你會如何處理這些信息?