簡體   English   中英

為什么GAE python SDK在virtualenv中使用系統的python?

[英]Why is the GAE python SDK using the system's python while in a virtualenv?

我在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
    __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是活躍的
  • 該軟件包安裝在virtualenv中
  • 活躍的python是virtualenv中的一個
  • 在python shell上可以導入包
  • dev_appserver.py在第一行#!/usr/bin/env python ,它應該告訴系統使用活動的python(來自virtualenv的那個!)

為什么要使用/usr/lib/python2.7/importlib/__init__.py 這不屬於活動的python(virtualenv上的那個)!

編輯

一個項目可以在virtualenv上安裝sdk,但它已經過時了。 有沒有更新的方法來實現這一目標?

除了dizballanze的答案之外 ,我更願意將所有內容安裝在我的virtualenv ,然后將我的virtualenv's site packages符號鏈接到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引擎上傳項目目錄中的所有文件。 要阻止應用引擎上傳整個virtualenv,請通過app.yamlskip files部分:

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

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

  • app.yaml編寫GAE運行時支持的所需包的列表
  • 將第三方軟件包安裝到lib/目錄(僅限純python軟件包)並將這些代碼添加到appengine_config.py

     from google.appengine.ext import vendor # Add any libraries installed in the "lib" folder. vendor.add('lib') 

閱讀GAE文檔中的更多內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM