Ошибки Python2.7 GAE в LocalDevServer в os.environ ['PATH'] - PullRequest
0 голосов
/ 02 июня 2019

Я начинаю модернизировать свою интеграцию с чередующимися платежами, чтобы соответствовать требованиям SCA Я использую Python2.7 на Google App Engine. Я использую компьютер с Windows. Я обновил и обновил программное обеспечение (gcloud SDK в Windows, библиотека Stripe с использованием установки pip).

Ошибка

Я пытаюсь настроить вещи на своем локальном сервере разработки, чтобы я мог настроить их перед загрузкой на серверы Google для размещения.

Когда я импортирую полосу, используя:

import stripe

Я получаю сообщение об ошибке трассировки:

Traceback (most recent call last):
  File "{_dir1_}\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\runtime\wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "{_dir1_}\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\runtime\wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "{_dir1_}\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\runtime\wsgi.py", line 96, in LoadObject
    __import__(cumulative_path)
  File "{_dir1_}\{_dir2_}\python_apps\payments\payments-sca.py", line 6, in <module>
    from stripe import util
  File "{_dir1_}\{_dir2_}\python_libs\stripe\__init__.py", line 34, in <module>
    from stripe.api_resources import *  # noqa
  File "{_dir1_}\{_dir2_}\python_libs\stripe\api_resources\__init__.py", line 5, in <module>
    from stripe.api_resources.list_object import ListObject
  File "{_dir1_}\{_dir2_}\python_libs\stripe\api_resources\list_object.py", line 4, in <module>
    from stripe.stripe_object import StripeObject
  File "{_dir1_}\{_dir2_}\python_libs\stripe\stripe_object.py", line 8, in <module>
    from stripe import api_requestor, util, six
  File "{_dir1_}\{_dir2_}\python_libs\stripe\api_requestor.py", line 12, in <module>
    from stripe import error, oauth_error, http_client, version, util, six
  File "{_dir1_}\{_dir2_}\python_libs\stripe\http_client.py", line 32, in <module>
    import requests
  File "{_dir1_}\{_dir2_}\python_libs\requests\__init__.py", line 95, in <module>
    from urllib3.contrib import pyopenssl
  File "{_dir1_}\{_dir2_}\python_libs\urllib3\contrib\pyopenssl.py", line 46, in <module>
    import OpenSSL.SSL
  File "{_dir1_}\{_dir2_}\python_libs\OpenSSL\__init__.py", line 8, in <module>
    from OpenSSL import crypto, SSL
  File "{_dir1_}\{_dir2_}\python_libs\OpenSSL\crypto.py", line 12, in <module>
    from cryptography import x509
  File "{_dir1_}\{_dir2_}\python_libs\cryptography\x509\__init__.py", line 8, in <module>
    from cryptography.x509.base import (
  File "{_dir1_}\{_dir2_}\python_libs\cryptography\x509\base.py", line 16, in <module>
    from cryptography.x509.extensions import Extension, ExtensionType
  File "{_dir1_}\{_dir2_}\python_libs\cryptography\x509\extensions.py", line 14, in <module>
    from asn1crypto.keys import PublicKeyInfo
  File "{_dir1_}\{_dir2_}\python_libs\asn1crypto\keys.py", line 22, in <module>
    from ._elliptic_curve import (
  File "{_dir1_}\{_dir2_}\python_libs\asn1crypto\_elliptic_curve.py", line 51, in <module>
    from ._int import inverse_mod
  File "{_dir1_}\{_dir2_}\python_libs\asn1crypto\_int.py", line 56, in <module>
    from ._perf._big_num_ctypes import libcrypto
  File "{_dir1_}\{_dir2_}\python_libs\asn1crypto\_perf\_big_num_ctypes.py", line 35, in <module>
    libcrypto_path = find_library(b'crypto' if sys.version_info < (3,) else 'crypto')
  File "C:\Python27\lib\ctypes\util.py", line 52, in find_library
    for directory in os.environ['PATH'].split(os.pathsep):
  File "{_dir1_}\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\runtime\request_environment.py", line 126, in __getitem__
    return self._request.environ[key]
KeyError: 'PATH'

Похоже, что он импортирует целый каскад библиотек, но выдает ошибку в os.environ ['PATH'], говоря, что 'PATH' не является ключом.

Пытаясь понять это

(1) Если я напрямую вызываю os.environ ['PATH'] из стандартной оболочки командной строки python, все хорошо.

>>> import os
>>> os.environ['PATH']
'C:\\Program Files (x86).. etc.'

(2) Однако попытка вызвать os.environ ['PATH'] из моего экземпляра сервера разработки GAE вызывает ту же ошибку, что и при попытке импортировать чередование. Например простой код в одном из моих обработчиков:

tmp=os.environ['PATH']

Ошибки с:

Traceback (most recent call last):
  File "{_dir1_}\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1535, in __call__
    rv = self.handle_exception(request, response, e)
  File "{_dir1_}\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1529, in __call__
    rv = self.router.dispatch(request, response)
  File "{_dir1_}\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "{_dir1_}\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "{_dir1_}\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "{_dir1_}\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "{_dir1_}\{_dir2_}\python_apps\payments\payments-sca.py", line 45, in get
    response = self.get_RegenerateResponse() # actually generate full response from datastore
  File "{_dir1_}\{_dir2_}\python_apps\payments\payments-sca.py", line 28, in get_RegenerateResponse
    tmp=os.environ['PATH'] ##############
  File "{_dir1_}\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\runtime\request_environment.py", line 126, in __getitem__
    return self._request.environ[key]
KeyError: 'PATH'

Подразумевает, что, возможно, мы не можем вызвать os.environ ['PATH'] на сервере разработчиков GAE, но не знаю почему.

(3) Однако, после того, как я загрузил свой код на серверы GAE, эта строка все еще выдает ошибку: "tmp = os.environ ['PATH']", но "полоса импорта" работает нормально без ошибок.

Вопрос

Как мне решить это? Есть ли какие-то другие настройки в конфигурации GAE или файлах yaml, которые мне нужны, чтобы позволить мне сделать это на моем локальном dev-сервере?

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 16 июня 2019

Ответ заключается в том, что мне нужно было принудительно установить переменные среды в методе devserver os.environ.

При запуске сервера dev используйте либо следующее

dev_appserver.py app.yaml --env_var PATH="{{ PATH environment variable }}"

Или вы можетеобъявляйте переменные окружения явно в вашем app.yaml!

Я просто поместил стандартный ответ os.environ ('PATH') в эти опции выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...