2012-07-19 66 views
0

我有一個python模塊打包distutils成一個壓縮的雞蛋安裝在自定義前綴。如果我將PYTHONPATH設置爲包含該前綴的site-packages目錄,則egg會添加到sys.path中,並且可以導入該模塊。但是,如果我在腳本中運行site.addsitedir並使用前綴的site-packages目錄,則egg不會添加到sys.path,並且導入模塊失敗。在這兩種情況下,模塊的site-packages目錄都以sys.path結尾。site.addsitedir不添加雞蛋到sys.path

這是預期的行爲?如果是這樣,有什麼辦法可以告訴Python在沒有設置env var的情況下處理給定目錄中的.pth文件嗎?

+0

什麼是.pth文件?如果您手動將egg添加到sys.path,它會工作嗎?創建和使用雞蛋的Python版本是否相同? – jfs 2012-07-19 14:43:37

+0

.pth文件:import sys; sys .__ plen = len(sys.path) ./webcharon-0.1-py2.7.egg import sys;新= sys.path中[SYS .__ PLEN:]; del sys.path [sys .__ plen:]; P = GETATTR(SYS, '__ egginsert',0); sys.path中[P:P] =新; sys .__ egginsert = p + len(新) – 2012-07-19 14:56:38

+0

Python版本相同。事實上,相同的二進制。 – 2012-07-19 14:56:58

回答

2

如果我將PYTHONPATH設置爲包含該前綴的site-packages目錄,則將egg添加到sys.path中,並且可以導入該模塊。

將一些目錄添加到PYTHONPATH不會觸發處理其中的文件.pth。因此你的壓縮蛋不會在sys.path。只有當蛋本身位於sys.path(父目錄不夠)時,才能從蛋中導入模塊。

但是,如果我在腳本內部運行site.addsitedir和前綴的site-packages目錄,但是egg不會添加到sys.path,並且導入模塊失敗。

site.addsitedir()觸發處理.pth -files如果目錄還沒有被看到,所以它應該工作。

您描述的行爲與應該發生的情況相反。

正如你可以在雞蛋手動添加到sys.path解決方法:sys.path.insert(0, '/path/to/the.egg')

+0

解決方法奏效。不知道發生了什麼,無法在另一臺機器上重現。 – 2012-07-20 23:43:29