2013-08-21 74 views
1

我正在開發一個關於google appengine的twitter應用程序 - 爲此我想使用Twython庫。我嘗試使用pip來安裝它 - 但它要麼將其安裝在主python目錄中,要麼不導入所有依賴項。如何在特定目錄中安裝python包

我可以簡單地將Twython的所有文件複製到appengine根目錄,還手動導入所有依賴庫,但這似乎是非常錯誤的。如何在特定的文件夾中安裝軟件包,包括它的所有依賴項?

感謝

+2

如果你把它放在一個目錄中,例如'external_modules /',然後使用'sys.path.insert(0,'external_modules')',這是否行得通? – tobspr

+0

@TobSpr是在項目的根目錄中嗎?我會在哪裏放置'sys.path.insert'調用? – MeLight

+0

我沒有經驗的谷歌應用程序引擎,但你會在第一次導入模塊之前調用sys.path.insert。如果你在'external_modules /'中放置了一個「module.pyd」,並且想要做一個「導入模塊」,那麼先放置sys.path.insert。我不知道這是否也適用於谷歌應用程序引擎 – tobspr

回答

3

如果將模塊文件放在一個目錄中,例如external_modules/,然後使用sys.path.insert(0, 'external_modules'),則可以將該模塊包含爲內部模塊。

您必須在第一次導入模塊之前調用sys.path.insert例如:如果您在external_modules/中放置了「module.pyd」,並且想要將其與import module一起包含,請先放置sys.path.insert

sys.path.insert()是一個應用程序範圍的調用,因此您只需調用它一次。在任何其他導入之前(當然除了import sys),最好將它放在主文件中。

+1

一堆謝謝! – MeLight

0

如果您在使用PIP安裝包,試試這個:

Install a Python package into a different directory using pip?

我個人需要的庫ŧ我只是使用了git回購的帽子。我只是符號鏈接這些庫而不是安裝它們。但在那種情況下,我不得不手動符號鏈接所有的依賴關係。

+0

我試着去關注那個解決方案,但是我覺得我錯過了一些東西我是一個python noob。我通過按照字面意思來回答這個錯誤:'ValueError:invalid variable'$'PREFIX_PATH'''。 對複雜依賴關係樹上的每個庫進行symlinking看起來像是一個非常難以擴展的解決方案:/ – MeLight

+0

您可以指定實際路徑,而不是鍵入$'PREFIX_PATH'。這將安裝所有的包到指定的目錄。之後您可能需要使用其他問題中提到的sys.path.insert()技巧。確保你安裝的任何路徑都在你的GAE項目中! – dragonx

+0

謝謝,我用'sys.path.insert()'解決方案。我覺得有點像輸入PREFIX_PATH:D – MeLight

0

您可以使用gaenv(我爲應用程序引擎構建的包管理器)。它只創建符號鏈接並遵循pip requirements.txt格式。您可以安裝&使用,如:

pip install gaenv 
# create requirements.txt -> twython 
pip install -r requirements.txt 
gaenv 

這將創建符號鏈接gaenv_lib所有所需的庫/。然後會要求添加導入語句。