代码之家  ›  专栏  ›  技术社区  ›  David S.

无法在GAE本地开发环境上导入6

  •  0
  • David S.  · 技术社区  · 6 年前

    我在尝试运行GAE Python 2.7应用程序时遇到以下错误。

    ImportError: No module named six
    

    我跟着 this 页面并设置我的 app.yaml 文件如下。

    ...
    libraries:
      - name: six
        version: "1.9.0"
      - name: flask
        version:  "0.12"
      - name: jinja2
        version: "2.6"
      - name: pycrypto
        version: "2.6.1"
      - name: markupsafe
        version: "0.23"
      - name: werkzeug
        version: "0.11.10"
      - name: pytz
        version: "2017.3"
    

    当我尝试导入 flask six 直接的。

    我打印出了 sys.path 变量

    ['C:\\Users\\user\\PycharmProjects\\gaeapp\\dist', 'C:\\Users\\user\\PycharmProjects\\gaeapp\\dist\\lib', 'C:\\Program Files (x86)\\Google\\google_appengine', 'C:\\Program Files (x86)\\Google\\google_appengine', 'C:\\Users\\user\\AppData\\Local\\conda\\conda\\envs\\py27-base\\DLLs', 'C:\\Users\\user\\AppData\\Local\\conda\\conda\\envs\\py27-base\\lib', 'C:\\Users\\user\\AppData\\Local\\conda\\conda\\envs\\py27-base', 'C:\\Program Files (x86)\\Google\\google_appengine\\lib\\flask-0.12', 'C:\\Program Files (x86)\\Google\\google_appengine\\lib\\jinja2-2.6', 'C:\\Program Files (x86)\\Google\\google_appengine\\lib\\pycrypto-2.6.1', 'C:\\Program Files (x86)\\Google\\google_appengine\\lib\\markupsafe-0.23', 'C:\\Program Files (x86)\\Google\\google_appengine\\lib\\werkzeug-0.11.10', 'C:\\Program Files (x86)\\Google\\google_appengine\\lib\\pytz-2017.3', 'C:\\Program Files (x86)\\Google\\google_appengine\\lib\\six-1.9.0', 'C:\\Program Files (x86)\\Google\\google_appengine\\lib\\click-6.6', 'C:\\Program Files (x86)\\Google\\google_appengine\\lib\\itsdangerous-0.24', 'C:\\Program Files (x86)\\Google\\google_appengine\\lib\\setuptools-0.6c11', 'C:\\Program Files (x86)\\Google\\google_appengine\\lib\\protorpc-1.0', 'C:\\Program Files (x86)\\Google\\google_appengine\\lib\\webapp2-2.3', 'C:\\Program Files (x86)\\Google\\google_appengine\\lib\\webob-1.1.1', 'C:\\Program Files (x86)\\Google\\google_appengine\\lib\\yaml-3.10']
    

    存在

    我还尝试导入 直接在pythonshell中打包,成功了。

    (py27-base) C:\>set PYTHONPATH=C:\Program Files (x86)\Google\google_appengine\lib\six-1.9.0
    
    (py27-base) C:\>python
    Python 2.7.15 |Anaconda, Inc.| (default, Nov 13 2018, 17:33:26) [MSC v.1500 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import six
    >>> six
    <module 'six' from 'C:\Program Files (x86)\Google\google_appengine\lib\six-1.9.0\six\__init__.py'>
    >>> exit()
    

    开发应用服务器

    环境细节

    • Windows 10 64位,内部版本1809
    • Python 2.7.15::Anaconda公司。
    • GAE Python标准SDK,版本1.9.80。 不是gcloudsdk

    日志详细信息

    2018-12-19 14:00:18 Running command: "['C:\\Users\\user\\AppData\\Local\\conda\\conda\\envs\\py27-base\\pythonw.exe', 'C:\\Program Files (x86)\\Google\\google_appengine\\dev_appserver.py', '--skip_sdk_update_check=yes', '--port=8080', '--admin_port=8000', 'C:\\Users\\user\\PycharmProjects\\gaeapp\\dist']"
    INFO     2018-12-19 14:00:22,907 devappserver2.py:278] Skipping SDK update check.
    INFO     2018-12-19 14:00:23,483 api_server.py:275] Starting API server at: http://localhost:54700
    INFO     2018-12-19 14:00:23,493 dispatcher.py:256] Starting module "default" running at: http://localhost:8080
    INFO     2018-12-19 14:00:23,497 admin_server.py:150] Starting admin server at: http://localhost:8000
    INFO     2018-12-19 14:00:28,579 instance.py:294] Instance PID: 11908
    INFO     2018-12-19 14:00:30,862 module.py:861] default: "GET / HTTP/1.1" 404 -
    INFO     2018-12-19 14:00:35,223 module.py:434] [default] Detected file changes:
      blog\__init__.pyc
    WARNING  2018-12-19 06:00:35,575 sandbox.py:1086] The module _winreg is whitelisted for local dev only. If your application relies on _winreg, it is likely that it will not function properly in production.
    
    WARNING  2018-12-19 06:00:35,953 sandbox.py:1086] The module _ctypes is whitelisted for local dev only. If your application relies on _ctypes, it is likely that it will not function properly in production.
    
    WARNING  2018-12-19 06:00:36,165 sandbox.py:1086] The module msvcrt is whitelisted for local dev only. If your application relies on msvcrt, it is likely that it will not function properly in production.
    
    ERROR    2018-12-19 06:00:36,315 wsgi.py:263] 
    
    Traceback (most recent call last):
    
      File "C:\Program Files (x86)\Google\google_appengine\google\appengine\runtime\wsgi.py", line 240, in Handle
    
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
    
      File "C:\Program Files (x86)\Google\google_appengine\google\appengine\runtime\wsgi.py", line 299, in _LoadHandler
    
    handler, path, err = LoadObject(self._handler)
    
      File "C:\Program Files (x86)\Google\google_appengine\google\appengine\runtime\wsgi.py", line 85, in LoadObject
    
    obj = __import__(path[0])
    
      File "C:\Users\user\PycharmProjects\gaeapp\dist\blog\__init__.py", line 6, in <module>
    
    from blog.resources import bloglist, blog, comment
    
      File "C:\Users\user\PycharmProjects\gaeapp\dist\blog\resources\__init__.py", line 7, in <module>
    
    from flask_restful import fields
    
      File "C:\Users\user\PycharmProjects\gaeapp\dist\lib\flask_restful\fields.py", line 6, in <module>
    
    import six
    
      File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\devappserver2\python\runtime\sandbox.py", line 1149, in load_module
    
    raise ImportError('No module named %s' % fullname)
    
    ImportError: No module named six
    
    INFO     2018-12-19 14:00:36,362 module.py:861] default: "GET /blog/resources/blogs HTTP/1.1" 500 -
    INFO     2018-12-19 14:00:41,301 instance.py:294] Instance PID: 19088
    INFO     2018-12-19 14:00:41,301 module.py:434] [default] Detected file changes:
      blog
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Alex    6 年前

    我在本地主机(即osx上的pycrypto)中缺少生产中存在的随机库时遇到过一些问题

    那么除了有一个 lib https://cloud.google.com/appengine/docs/standard/python/tools/using-libraries-python-27

    localhost_libs 对于这些有问题的库

    然后在我的 appengine_config.py 我有这个:

    from google.appengine.ext import vendor
    vendor.add('lib')
    
    if os.environ.get('SERVER_SOFTWARE', '').startswith('Development'):
        vendor.add('localhost_libs')
    
        2
  •  0
  •   Tiago Souza    6 年前

    我按照您上面的描述创建了一个测试环境,但是在导入您在中指定的模块时没有遇到问题 app.yaml 文件另一种可能的故障排除方法是创建一个演示应用程序,以便仔细检查GAE启动器是否能够在dev_appserver环境中获取这些内置库。为此,通过进入谷歌应用程序引擎启动器, File > Add Demo Application > python > guestbook app.yaml guestbook.py 要导入(例如)的文件 six 模块和打印 var = six.__version__ 在留言簿页面中,您可以检查是否引发了异常。

    正如Alex所建议的,一个可能的解决方案是通过将第三方库添加到 requirements.txt 文件,正在运行 pip install -t lib -r requirements.txt 以及创建相应的 appengine_config.py 文件,如中所述 this article appengine_config.py

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

    非常理想(如Alex的回复中提供的文章所示)。

    我还想补充一点,如果项目还有其他本地库(从回溯来看似乎是这样),请确保安装这些依赖项 您的应用程序,如上所述 in this answer .