我在ROOT-DIR
中有一个Google App Engine程序,在ROOT-DIR/env
中有一些带有一些库的virtualenv,包括sqlalchemy。
我尝试使用开发服务器运行我的程序(使用msys a.k.a. git-bash)
$ cd ROOT-DIR
$ source ./env/Scripts/activate
$ python path-to-gae/dev_appserver.py .
服务器启动,但当我浏览到localhost:8080
时,服务器会在sqlalchemy上引发导入错误。
在主文件的顶部添加一些打印语句,我发现在我尝试导入sqlalchemy时的系统路径如下:
ROOT-DIR
d:\Google\google_appengine
d:\Google\google_appengine
ROOT-DIR\env\lib
C:\python27\Lib
C:\python27\DLLs
ROOT-DIR\env
d:\Google\google_appengine\lib\webapp2-2.5.2
d:\Google\google_appengine\lib\jinja2-2.6
d:\Google\google_appengine\lib\MySQLdb-1.2.4
d:\Google\google_appengine\lib\markupsafe-0.15
d:\Google\google_appengine\lib\setuptools-0.6c11
d:\Google\google_appengine\lib\protorpc-1.0
d:\Google\google_appengine\lib\webob-1.1.1
d:\Google\google_appengine\lib\yaml-3.10
显然,ROOT-DIR/env/lib/site-packages
不存在,这解释了导入错误。
如果我启动virtualenv的python shell并执行此操作
import sys
for x in sys.path:
print x
我看到ROOT-DIR\env\lib\site-packages
,所以似乎GAE开发服务器在运行时删除该路径,或者什么。
为什么dev服务器会丢弃site-packages目录?
这适用于Windows 8上的Python 2.7。
答案 0 :(得分:2)
您只能使用virtualenv来处理与支持的第三方库相匹配的本地库。对于所有其他人,您必须将它们安装到项目目录中,以便部署它们。
阅读https://cloud.google.com/appengine/docs/python/tools/libraries27密切关注“使用virtualenv管理本地库”,然后“将第三方软件包添加到应用程序”,尤其是第二个主题。有区别。
virtualenv / local libs只存在,因此您不必在项目文件夹或基础python发行版中安装这些库。如果要在项目中安装这些,则需要在部署之前将其删除。请记住,需要使用您的代码部署所有自定义第三方库。 “本地库”仅适用于谷歌支持的库。