python - 为什么 GAE python SDK 在 vi​​rtualenv 中使用系统的 python?

标签 python python-2.7 google-app-engine virtualenv

我在 virtualenv 中。我已经按照 the documentation 安装了 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

我已经验证过的内容:

  • 虚拟环境处于事件状态
  • 软件包已安装在 virtualenv 中
  • 活跃的Python是virtualenv中的Python
  • 可以在 python shell 上导入包
  • dev_appserver.py 第一行有 #!/usr/bin/env python,它应该告诉系统使用事件的 python(来自虚拟环境!)

为什么要使用/usr/lib/python2.7/importlib/__init__.py?这不属于事件的 python(virtualenv 上的 python)!

编辑

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

最佳答案

除了 dizballanze's answer ,我更喜欢将所有内容都安装在我的 virtualenv 中,然后将我的 virtualenv 的站点包 符号链接(symbolic link)到 lib 文件夹,其内容类似于:

ln -s env/lib/python2.7/site-packages lib

这会产生一个文件夹,我的 devappserver 在其中使用 virtualenv 的包

├── env
├── lib -> env/lib/python2.7/site-packages

您可以在https://www.jeffgodwyll.com/posts/2015/google-appegine-vendoring-done-right/阅读我的更多方法。

编辑

App Engine 上传项目目录中的所有文件。为了防止应用引擎上传整个 virtualenv,请让它通过 app.yamlskip files 部分:

skip_files:
- ^env$  # virtual environment's folder

关于python - 为什么 GAE python SDK 在 vi​​rtualenv 中使用系统的 python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34912098/

相关文章:

python - 如何用百分比制作 Pandas 交叉表?

python - 根据系统资源使用情况监视和终止 Python 脚本

python-2.7 - 在 Python 中将 str 消息插入 Unicode 日志模板时出现 UnicodeDecodeError

google-app-engine - 使用 google Oauth 2.0 进行身份验证与已注册的重定向 URI 不匹配

google-app-engine - 如何在 Google App Engine 中查询具有 GeoPt 属性的 "nearby"实体?

python - 嵌套for循环的缩进

python - 使用 Opencv Python 检测角点

html - 无法解码 JSON 对象(尽管数据确实存在)

Python 2.7 将于 2020 年 1 月 1 日结束其生命周期

Python删除请求rest api(on gae)