2010-05-03 80 views
3

我正在開發GAE應用程序。訪問模塊在GAE dev服務器中被拒絕

已經用setuptools安裝了「feedparser」模塊,我嘗試導入它(帶有「import feedparser」)語句。然而,模塊不會加載,當我看着屏幕上的dev_appserver.py調試日誌,我看到以下內容:

Access to module file denied: /usr/local/lib/python2.6/dist-packages/feedparser-4.1-py2.6.egg/feedparser.py 

所以GAE開發服務器不能訪問模塊,但我想不出爲什麼。路徑是正確的,文件是可訪問的。

我對Python/Django/GAE相當陌生 - 我錯過了什麼?

+0

BTW,當我運行python的命令行,並嘗試「進口feedparser」,它的工作原理沒有瑕疵 – 2010-05-03 07:54:16

+0

聽起來像一個權限錯誤,什麼用戶是dev_appserver.py當它運行? – Zack 2010-05-03 08:01:22

回答

6

App Engine在沙盒中運行Python代碼,並且只有授權的標準庫模塊&包可以從您的應用程序導入。

as @mg已經提到,如果您想允許第三方模塊&包,您需要將它們與您的應用程序捆綁在一起。要專門爲feedparser執行此操作,只需將feedparser.py文件放入您的頂級App Engine目錄(您的app.yaml,index.yamlmain.py所在的目錄)即可。

(更新時間:2011年10月)也記住的硬限制:文件(應用程序文件和靜態文件)的

  • 最大總數:3000(調升爲10k 1.5.5,2011年10月)
  • 應用程序或靜態文件的最大大小:10MB(在1.5中最高可達32MB。5)
  • 最大所有的應用程序和靜態文件的總大小:150MB

如果要保存的文件總數,你可以把.py文件一疊一個ZIP所以您只需支付一個文件。雖然這篇文章是略掉過期 - 這是目前包括的Django 1.0的建議捆綁 - 捆紮模塊&包成ZIP文件的技術仍然適用:

http://code.google.com/appengine/articles/django10_zipimport.html

官方頁面的文檔其中討論了文件限制:

http://code.google.com/appengine/docs/python/runtime.html#Pure_Python

(修訂版2011年11月):下鏈路功能列入白名單的Python模塊/包與2.5 C代碼的列表。 Python 2.7運行時會釋放很多限制,以便白名單成爲黑名單。下面是允許/白名單2.5℃模塊以及在不允許的/黑名單2.7的C模塊:

http://code.google.com/appengine/kb/libraries.html

1

因爲在GAE中,您不能訪問不屬於GAE本身的庫,不包含在GAE中,比如django 0.96.1,或者不屬於您的應用程序。將該庫和其他所有人安裝在Web應用程序的相同路徑中。

編輯

documentation

您可以包括其他純Python庫 您的應用程序通過 將代碼在應用程序 目錄。如果您在 應用程序目錄中的模塊目錄中創建了一個符號鏈接 ,appcfg.py將 跟隨該鏈接,並在您的應用程序中包含模塊 。

Python的模塊包括路徑 包括應用程序的根目錄 (含有 的app.yaml文件的目錄)。您在應用程序的根目錄 中創建的 的模塊可使用 根目錄中的路徑。不要忘記在子目錄中創建 init .py文件,因此Python會將 子目錄識別爲包。