ctypes init 使用本地应用程序引擎、django 和 virtualenv 与 python 2.7 失败
ctypes init fails using local app engine, django and virtualenv with python 2.7
我遇到了 ctypes 初始化的问题
if int(_os.uname()[2].split('.')[0]) < 8:
ValueError: invalid literal for int() with base 10: '
我的应用程序是用 Python 2.7 编写的,基于 Django,运行 在本地使用 App Engine SDK 和 virtualenv。它已经投入生产很长时间了,并且 运行 在其他机器上本地成功。这意味着这是我机器的本地问题。我在 Mac OSX 10.15.3 Catalina。
在启动应用程序引擎本地开发服务器后加载应用程序的任何页面时会出现问题。 App Engine 服务器成功启动(我可以访问 App Engine 管理网页),但出现了上述异常(请参阅下面的调用堆栈),因为它似乎 os.uname()
正在返回无效值。
当运行 os.uname()
我自己时,结果似乎是合法的。无论是激活 virtualenv 还是使用 os/pyenv python interpeter.
Python 2.7.15 (default, Mar 15 2020, 22:00:51)
[GCC 4.2.1 Compatible Apple LLVM 11.0.0 (clang-1100.0.33.17)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.uname()[2].split('.')[0]
'19'
我尝试过的解决方案:
- 在 virtualenv 内部和外部调用
os.uname()
,它工作正常。
- 使用系统创建virtualenv Python 2.7.17 安装
- 使用具有 3 个不同 python 2 个版本(2.7.17、2.7.16、2.7.15)的 pyenv 创建 virtualenvs
查看完整的调用堆栈,似乎 ctypes init 是从 virtualenv 外部的 interpeter 调用的。如果我在创建 virtualenv 时使用 OS 的 python 或 pyenv python 都是如此。也许它没有在 virtualenv 中找到 ctypes?
Traceback (most recent call last):
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/platform/google_appengine/google/appengine/api/lib_config.py", line 358, in __getattr__
self._update_configs()
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/platform/google_appengine/google/appengine/api/lib_config.py", line 294, in _update_configs
self._registry.initialize()
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/platform/google_appengine/google/appengine/api/lib_config.py", line 165, in initialize
import_func(self._modname)
File "/Users/myuser/.pyenv/versions/2.7.15/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/Users/myuser/git/myproject/appengine_config.py", line 38, in <module>
cloud_sql_conn_retry.monkey_patch_mysql_backend()
File "/Users/myuser/git/myproject/server/utils/cloud_sql_conn_retry.py", line 14, in monkey_patch_mysql_backend
from django.db.backends.mysql.base import DatabaseWrapper
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line 38, in <module>
from .creation import DatabaseCreation # isort:skip
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/db/backends/mysql/creation.py", line 4, in <module>
from django.db.backends.base.creation import BaseDatabaseCreation
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/db/backends/base/creation.py", line 5, in <module>
from django.core import serializers
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/core/serializers/__init__.py", line 23, in <module>
from django.core.serializers.base import SerializerDoesNotExist
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/core/serializers/base.py", line 4, in <module>
from django.db import models
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/db/models/__init__.py", line 3, in <module>
from django.db.models.aggregates import * # NOQA
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/db/models/aggregates.py", line 5, in <module>
from django.db.models.expressions import Func, Star
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/db/models/expressions.py", line 6, in <module>
from django.db.models import fields
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 14, in <module>
from django import forms
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/forms/__init__.py", line 7, in <module>
from django.forms.fields import * # NOQA
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/forms/fields.py", line 17, in <module>
from django.core import validators
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/core/validators.py", line 507, in <module>
allowed_extensions=get_available_image_extensions(),
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/core/validators.py", line 498, in get_available_image_extensions
from PIL import Image
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/PIL/Image.py", line 134, in <module>
from pathlib2 import Path
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/pathlib2/__init__.py", line 5, in <module>
import ctypes
File "/Users/myuser/.pyenv/versions/2.7.15/lib/python2.7/ctypes/__init__.py", line 29, in <module>
if int(_os.uname()[2].split('.')[0]) < 8:
ValueError: invalid literal for int() with base 10: ''
此外,在 python shell 中导入 ctypes 时,一切正常。这是在虚拟环境中导入的库的路径。 ctypes 和 os 从 pyenv interpeter 导入,django 从 virtualenv python 导入。我不清楚原因,我怀疑这可能与问题有关。
>>> import ctypes
>>> print(ctypes)
<module 'ctypes' from '/Users/myuser/.pyenv/versions/2.7.15/lib/python2.7/ctypes/__init__.pyc'>
>>> import os
>>> print (os)
<module 'os' from '/Users/myuser/.pyenv/versions/2.7.15/lib/python2.7/os.pyc'>
>>> import django
>>> print (django)
<module 'django' from '/Users/myuser/git/myapp/env/lib/python2.7/site-packages/django/__init__.pyc'>
我在 google 上找不到任何具有相同问题的结果。
可能是什么问题?
此问题是由在 app.yaml
中配置的旧版本 PIL 引起的。 App Engine 支持开箱即用,最高版本为 1.1.17,它不适用于最新的 python 2 版本。
我安装了 5.0.0 版的 PIL 并从 App Engine 设置中删除了 1.1.17,它解决了问题。
我遇到了 ctypes 初始化的问题
if int(_os.uname()[2].split('.')[0]) < 8:
ValueError: invalid literal for int() with base 10: '
我的应用程序是用 Python 2.7 编写的,基于 Django,运行 在本地使用 App Engine SDK 和 virtualenv。它已经投入生产很长时间了,并且 运行 在其他机器上本地成功。这意味着这是我机器的本地问题。我在 Mac OSX 10.15.3 Catalina。
在启动应用程序引擎本地开发服务器后加载应用程序的任何页面时会出现问题。 App Engine 服务器成功启动(我可以访问 App Engine 管理网页),但出现了上述异常(请参阅下面的调用堆栈),因为它似乎 os.uname()
正在返回无效值。
当运行 os.uname()
我自己时,结果似乎是合法的。无论是激活 virtualenv 还是使用 os/pyenv python interpeter.
Python 2.7.15 (default, Mar 15 2020, 22:00:51)
[GCC 4.2.1 Compatible Apple LLVM 11.0.0 (clang-1100.0.33.17)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.uname()[2].split('.')[0]
'19'
我尝试过的解决方案:
- 在 virtualenv 内部和外部调用
os.uname()
,它工作正常。 - 使用系统创建virtualenv Python 2.7.17 安装
- 使用具有 3 个不同 python 2 个版本(2.7.17、2.7.16、2.7.15)的 pyenv 创建 virtualenvs
查看完整的调用堆栈,似乎 ctypes init 是从 virtualenv 外部的 interpeter 调用的。如果我在创建 virtualenv 时使用 OS 的 python 或 pyenv python 都是如此。也许它没有在 virtualenv 中找到 ctypes?
Traceback (most recent call last):
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/platform/google_appengine/google/appengine/api/lib_config.py", line 358, in __getattr__
self._update_configs()
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/platform/google_appengine/google/appengine/api/lib_config.py", line 294, in _update_configs
self._registry.initialize()
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/platform/google_appengine/google/appengine/api/lib_config.py", line 165, in initialize
import_func(self._modname)
File "/Users/myuser/.pyenv/versions/2.7.15/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/Users/myuser/git/myproject/appengine_config.py", line 38, in <module>
cloud_sql_conn_retry.monkey_patch_mysql_backend()
File "/Users/myuser/git/myproject/server/utils/cloud_sql_conn_retry.py", line 14, in monkey_patch_mysql_backend
from django.db.backends.mysql.base import DatabaseWrapper
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line 38, in <module>
from .creation import DatabaseCreation # isort:skip
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/db/backends/mysql/creation.py", line 4, in <module>
from django.db.backends.base.creation import BaseDatabaseCreation
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/db/backends/base/creation.py", line 5, in <module>
from django.core import serializers
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/core/serializers/__init__.py", line 23, in <module>
from django.core.serializers.base import SerializerDoesNotExist
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/core/serializers/base.py", line 4, in <module>
from django.db import models
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/db/models/__init__.py", line 3, in <module>
from django.db.models.aggregates import * # NOQA
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/db/models/aggregates.py", line 5, in <module>
from django.db.models.expressions import Func, Star
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/db/models/expressions.py", line 6, in <module>
from django.db.models import fields
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 14, in <module>
from django import forms
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/forms/__init__.py", line 7, in <module>
from django.forms.fields import * # NOQA
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/forms/fields.py", line 17, in <module>
from django.core import validators
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/core/validators.py", line 507, in <module>
allowed_extensions=get_available_image_extensions(),
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/django/core/validators.py", line 498, in get_available_image_extensions
from PIL import Image
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/PIL/Image.py", line 134, in <module>
from pathlib2 import Path
File "/Users/myuser/git/myproject/env/lib/python2.7/site-packages/pathlib2/__init__.py", line 5, in <module>
import ctypes
File "/Users/myuser/.pyenv/versions/2.7.15/lib/python2.7/ctypes/__init__.py", line 29, in <module>
if int(_os.uname()[2].split('.')[0]) < 8:
ValueError: invalid literal for int() with base 10: ''
此外,在 python shell 中导入 ctypes 时,一切正常。这是在虚拟环境中导入的库的路径。 ctypes 和 os 从 pyenv interpeter 导入,django 从 virtualenv python 导入。我不清楚原因,我怀疑这可能与问题有关。
>>> import ctypes
>>> print(ctypes)
<module 'ctypes' from '/Users/myuser/.pyenv/versions/2.7.15/lib/python2.7/ctypes/__init__.pyc'>
>>> import os
>>> print (os)
<module 'os' from '/Users/myuser/.pyenv/versions/2.7.15/lib/python2.7/os.pyc'>
>>> import django
>>> print (django)
<module 'django' from '/Users/myuser/git/myapp/env/lib/python2.7/site-packages/django/__init__.pyc'>
我在 google 上找不到任何具有相同问题的结果。 可能是什么问题?
此问题是由在 app.yaml
中配置的旧版本 PIL 引起的。 App Engine 支持开箱即用,最高版本为 1.1.17,它不适用于最新的 python 2 版本。
我安装了 5.0.0 版的 PIL 并从 App Engine 设置中删除了 1.1.17,它解决了问题。