2012-05-18 199 views
4

Google App引擎文檔聲明,只要用純Python編寫,就可以上傳和使用第三方庫。上傳Python第三方庫

我需要採取什麼措施來做到這一點?

+1

就包括他們在您的應用程序引擎項目目錄(或子目錄)並使用相對路徑「導入」它們。當您部署到appengine時,該子目錄也將包含在推送中。 – rjz

+0

感謝您的回覆。所以說,我想包括一個名爲「tweetstream」的庫,我只需將它的文件夾複製到應用程序文件夾(其中包含app.yaml文件)中,然後在應用程序代碼中只說「import tweetsream」即可。這就是全部?我不需要在app.yaml文件中修改使用第三方應用程序嗎? – afroze

回答

11

我所做的是創建了一個在我的根目錄下名爲fix_path.py文件看起來像這樣:

import os 
import sys 
import jinja2 
# path to lib direcotory 
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'lib')) 

然後我創建了一個lib目錄,並在那裏掉落模塊。

例如,我使用WTForms。我的文件結構看起來像這樣。

  • LIB
    • wtforms
  • fix_path.py
  • somefile.py

當我準備從我somefile腳本中調用它

import fix_path # has to be first. 
import wtforms 

here就是我的github源代碼中的這個例子。 checkout fix_path.py用於設置和views.py的使用情況。

+0

我不明白「fix_path.py」文件的用途是什麼?另外,如果我在應用程序根文件夾(其中包含「app.yaml」)中創建了「lib」目錄,那麼我需要提及lib目錄的路徑嗎? – afroze

+0

fix_path文件只是路由到lib目錄,在那裏我存儲了所有的庫。我沒有提到我的app.waml文件中的lib文件夾。 – Busilinks

+0

這不應該在'__init __。py'中嗎? – Alden

0

好吧,我嘗試了以下步驟。

  1. 在我的項目根目錄下創建了一個包含init文件的目錄(lib),例如lib/__init__.py
  2. 創建了模塊(mymodule.py),在我main.py

    from lib import mymodule 
    

我可以從myfunc()使用返回的值,並可以通過即

def myfunc(): 
    return "mycustomfunction" 
  • 進口mymodule中定義的函數作爲我的jinja2模板的模板值

    同樣,如果我們遵循@rjz在第一個答案中也指出的內容,如果第三方庫只是一個模塊,那麼我們可以使用init文件將它保留在庫中,並且可以使用import語句導入它(點3)。如果第三方庫是一個包,那麼我們就可以把它放在項目的根,並用import語句導入一遍,因爲這一個在main.py

    from thirdpartypackage import *