我在 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.yaml
的 skip files
部分:
skip_files:
- ^env$ # virtual environment's folder
关于python - 为什么 GAE python SDK 在 virtualenv 中使用系统的 python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34912098/