Python3.9虚拟环境中出现语法错误及导入错误,且调用系统Python3.6的importlib问题求助
Python3.9虚拟环境中出现语法错误及导入错误,且调用系统Python3.6的importlib问题求助
我目前在Python3.9的虚拟环境里开发Django项目,之前查到的解决方案都只说要用Python3.7+版本并配合虚拟环境,这两点我都做到了,而且从报错栈里也能看到确实在使用3.9的环境,但还是遇到了诡异的问题。
核心异常发现
我在报错栈里看到了两行完全不符合预期的内容:代码居然跳出了虚拟环境,调用了系统的Python3.6版本的importlib模块,完全搞不懂为什么会出现这种情况。
最初的报错信息
Internal Server Error: /api/auth/token-auth/ Traceback (most recent call last): File "/workspace/mktplace/env/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner response = get_response(request) File "/workspace/mktplace/env/lib/python3.9/site-packages/django/core/handlers/base.py", line 165, in _get_response callback, callback_args, callback_kwargs = self.resolve_request(request) File "/workspace/mktplace/env/lib/python3.9/site-packages/django/core/handlers/base.py", line 288, in resolve_request resolver_match = resolver.resolve(request.path_info) File "/workspace/mktplace/env/lib/python3.9/site-packages/django/urls/resolvers.py", line 545, in resolve for pattern in self.url_patterns: File "/workspace/mktplace/env/lib/python3.9/site-packages/django/utils/functional.py", line 48, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "/workspace/mktplace/env/lib/python3.9/site-packages/django/urls/resolvers.py", line 589, in url_patterns patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) File "/workspace/mktplace/env/lib/python3.9/site-packages/django/utils/functional.py", line 48, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "/workspace/mktplace/env/lib/python3.9/site-packages/django/urls/resolvers.py", line 582, in urlconf_module return import_module(self.urlconf_name) File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 994, in _gcd_import File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 665, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 678, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/workspace/mktplace/market/market/market/urls.py", line 47, in <module> path(prepath, include('reporting.urls'), name='payg_v1_reporting') File "/workspace/mktplace/env/lib/python3.9/site-packages/django/urls/conf.py", line 34, in include urlconf_module = import_module(urlconf_module) File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 994, in _gcd_import File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 665, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 678, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/workspace/mktplace/market/market/reporting/urls.py", line 3, in <module> from .views import invoices_by_month, monthly_utilized, total_funds_utilized_by_month, total_funds_utilized_gauge, total_funds_utilized, monthly_average_return, invoice_status_by_month, invoice_current_statuses File "/workspace/mktplace/market/market/reporting/views.py", line 448, in <module> import matplotlib File "/workspace/mktplace/env/lib/python3.9/site-packages/matplotlib/__init__.py", line 126, in <module> import numpy File "/workspace/mktplace/env/lib/python3.9/site-packages/numpy/__init__.py", line 141, in <module> from . import core File "/workspace/mktplace/env/lib/python3.9/site-packages/numpy/core/__init__.py", line 9, in <module> from numpy.version import version as __version__ File "/workspace/mktplace/env/lib/python3.9/site-packages/numpy/version.py", line 1 from __future__ import annotations ^ SyntaxError: future feature annotations is not defined
尝试修复后的新问题
我把虚拟环境里所有通过pip安装的包都卸载后重新安装了,现在报错信息变了,但核心问题依然存在——还是调用了系统的Python3.6的importlib。新的报错如下:
Internal Server Error: /api/auth/token-auth/ Traceback (most recent call last): File "/workspace/mktplace/env/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner response = get_response(request) File "/workspace/mktplace/env/lib/python3.9/site-packages/django/core/handlers/base.py", line 165, in _get_response callback, callback_args, callback_kwargs = self.resolve_request(request) File "/workspace/mktplace/env/lib/python3.9/site-packages/django/core/handlers/base.py", line 288, in resolve_request resolver_match = resolver.resolve(request.path_info) File "/workspace/mktplace/env/lib/python3.9/site-packages/django/urls/resolvers.py", line 545, in resolve for pattern in self.url_patterns: File "/workspace/mktplace/env/lib/python3.9/site-packages/django/utils/functional.py", line 48, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "/workspace/mktplace/env/lib/python3.9/site-packages/django/urls/resolvers.py", line 589, in url_patterns patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) File "/workspace/mktplace/env/lib/python3.9/site-packages/django/utils/functional.py", line 48, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "/workspace/mktplace/env/lib/python3.9/site-packages/django/urls/resolvers.py", line 582, in urlconf_module return import_module(self.urlconf_name) File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 994, in _gcd_import File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 665, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 678, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/workspace/mktplace/market/market/market/urls.py", line 47, in <module> path(prepath, include('reporting.urls'), name='payg_v1_reporting') File "/workspace/mktplace/env/lib/python3.9/site-packages/django/urls/conf.py", line 34, in include urlconf_module = import_module(urlconf_module) File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 994, in _gcd_import File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 665, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 678, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/workspace/mktplace/market/market/reporting/urls.py", line 3, in <module> from .views import invoices_by_month, monthly_utilized, total_funds_utilized_by_month, total_funds_utilized_gauge, total_funds_utilized, monthly_average_return, invoice_status_by_month, invoice_current_statuses File "/workspace/mktplace/market/market/reporting/views.py", line 448, in <module> import matplotlib File "/workspace/mktplace/env/lib/python3.9/site-packages/matplotlib/__init__.py", line 126, in <module> import numpy File "/workspace/mktplace/env/lib/python3.9/site-packages/numpy/__init__.py", line 109, in <module> from ._globals import ( ImportError: cannot import name 'ModuleDeprecationWarning'
另外还有个奇怪的点:同一个requirements.txt文件,我执行pip install后安装的包数量比另一个开发者多,而且他的环境完全不会出现这个调用系统importlib的问题。
有没有大佬能帮忙分析下,为什么虚拟环境会跳出到系统Python3.6的importlib?该怎么解决这个问题?
备注:内容来源于stack exchange,提问作者general
相关产品推荐
相关产品推荐

