为什么GAE python SDK使用系统';在virtualenv中使用python?

为什么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 __

我在虚拟电视里。我已经安装了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
    __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
    在第一行
    #/usr/bin/env-python
    ,它应该告诉系统使用活动的python(来自virtualenv的那条)
为什么要使用
/usr/lib/python2.7/importlib/\uuuu init\uuuuu.py
?这不属于活动python(virtualenv上的python)

编辑
在virtualenv上安装sdk是有必要的,但它已经过时了。有没有更新的方法来实现这一点?

GAE目前不支持
virtualenv
。要使用软件包,您可以:

  • app.yaml
  • 将第三方软件包安装到
    lib/
    目录(仅限纯python软件包),并将这些代码添加到
    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
这将生成一个文件夹,my
devappserver
在其中使用
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