为什么GAE python SDK使用系统';在virtualenv中使用python?
我在虚拟电视里。我已经安装了GAE python SDK,如下所示。根据说明,SDK不直接在virtualenv上,而是在路径中 我已经安装了一些(非供应商的,即在virtualenv中)软件包,我正在启动GAE开发服务器:为什么GAE python SDK使用系统';在virtualenv中使用python?,python,python-2.7,google-app-engine,virtualenv,Python,Python 2.7,Google App Engine,Virtualenv,我在虚拟电视里。我已经安装了GAE python SDK,如下所示。根据说明,SDK不直接在virtualenv上,而是在路径中 我已经安装了一些(非供应商的,即在virtualenv中)软件包,我正在启动GAE开发服务器: » dev_appserver.py app.yaml 但在处理具有以下内容的请求时会崩溃: ... File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __
» dev_appserver.py app.yaml
但在处理具有以下内容的请求时会崩溃:
...
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/foo/bar/appengine-django-skeleton/mysite/settings.py", line 105, in <module>
import dj_database_url
ImportError: No module named dj_database_url
。。。
文件“/usr/lib/python2.7/importlib/_init_uuu.py”,第37行,在导入模块中
__导入(名称)
文件“/foo/bar/appengine-django-skeleton/mysite/settings.py”,第105行,在
导入dj_数据库_url
ImportError:没有名为dj_database_url的模块
我已经证实:
- virtualenv处于活动状态
- 该软件包安装在virtualenv中
- 活动python是virtualenv中的python
- 该包可以在python shell上导入
在第一行dev_appserver.py
,它应该告诉系统使用活动的python(来自virtualenv的那条)#/usr/bin/env-python
/usr/lib/python2.7/importlib/\uuuu init\uuuuu.py
?这不属于活动python(virtualenv上的python)
编辑
在virtualenv上安装sdk是有必要的,但它已经过时了。有没有更新的方法来实现这一点?GAE目前不支持
virtualenv
。要使用软件包,您可以:
- 在
app.yaml
- 将第三方软件包安装到
目录(仅限纯python软件包),并将这些代码添加到lib/
:appengine\u config.py
from google.appengine.ext import vendor # Add any libraries installed in the "lib" folder. vendor.add('lib')
virtualenv
中,然后将我的virtualenv网站包
符号链接到lib
文件夹,类似于:
ln -s env/lib/python2.7/site-packages lib
这将生成一个文件夹,mydevappserver
在其中使用virtualenv
的软件包
├── env
├── lib -> env/lib/python2.7/site-packages
你可以在网站上阅读更多我的方法
编辑
App engine上载项目目录中的所有文件。要防止app engine上载整个virtualenv,请让它通过app.yaml
的skip files
部分:
skip_files:
- ^env$ # virtual environment's folder
谢谢,但是我在virtualenv中安装的软件包是一个不能出售的软件包。它只在本地主机上开发时需要,但在gae中不需要。这就是为什么我只在virtualenv中安装(而不是在供应商目录中),但是
dev_appserver.py
找不到它。还有一个一般性的问题:您是否在回购中跟踪virtualenv?要部署到gae,您需要将供应商库提交到您的回购中……如果生产中不需要供应商库,您可以跳过virtualenv
和lib
文件夹。这样,他们就不会被这种方法跟踪,我只跟踪virtualenv的站点包,而不是整个virtualenv。不知道如何才能获得开发所需的包,而不是生产所需的包(可能是一个分析器),在这种情况下,将模块包含在标准库目录中(根据第三方库的所有其他建议)并使用跳过文件,这样它就不会被部署。谢谢,但是我在virtualenv中安装的软件包是一个不能出售的软件包。它只在本地主机上开发时需要,但在gae中不需要。这就是为什么我只安装在virtualenv(而不是供应商目录)中,但是dev_appserver.py
找不到它。顺便说一句:您提供的链接提供了在gae上运行时有关第三方库的详细信息。有没有关于如何在开发过程中在本地主机上使用GAE python SDK的文档?还有:在任何地方我都找不到一条声明说GAE不支持virtualenv(在本地主机上)。它不支持。任何不属于运行时的库或直接支持的库都必须位于您的代码库中。请记住,dev服务器正在模拟生产沙箱。它不会查找项目结构之外的库/文件。适用于生产环境的内容适用于生产-除非您需要自己提供受支持的第三方库-即lxml