gpt4 book ai didi

python - python如何从不在sys.path中的路径加载模块

转载 作者:太空宇宙 更新时间:2023-11-03 20:12:30 25 4
gpt4 key购买 nike

我正在调试一个 Python 导入问题,在使用 pex 文件运行代码时无法正确加载 jinja2。

在我的代码中设置断点,发现自己处于一个非常有趣的情况

(Pdb) import jinja2
(Pdb) import jinja2.utils
(Pdb) jinja2.utils
*** AttributeError: 'module' object has no attribute 'utils'
(Pdb) sys.modules.get("jinja2")
<module 'jinja2' from '/home/xxx/.pex/install/Jinja2-2.10.3-py2.py3-none-any.whl.02f611acfe90225e024bd496a640e01844bf5a32/Jinja2-2.10.3-py2.py3-none-any.whl/jinja2/__init__.py'>
(Pdb) sys.modules.get("jinja2.utils")
<module 'jinja2.utils' from '/usr/local/lib/python2.7/dist-packages/jinja2/utils.pyc'>
(Pdb) [i for i in sys.path if "usr/local/lib/python2.7" in i]
[]

在断点之前,jinja2 已经部分加载,因为我在 jinja2 的 __init__.py 中设置了断点,这是堆栈跟踪:

-> exec code in run_globals
/home/xxx/.pex/code/e7fe7e585c258eb7224ec5030b9d53b74cdfb06f/application/app.py(2)<module>()
-> from flask import Flask, abort, request
/home/xxx/.pex/install/Flask-1.0-py2.py3-none-any.whl.abe8dd5f49600e54576b3360b7622e1cc97e86fc/Flask-1.0-py2.py3-none-any.whl/flask/__init__.py(19)<module>()
-> from jinja2 import Markup, escape
> /home/xxx/.pex/install/Jinja2-2.10.3-py2.py3-none-any.whl.02f611acfe90225e024bd496a640e01844bf5a32/Jinja2-2.10.3-py2.py3-none-any.whl/jinja2/__init__.py(58)<module>()
-> print("aaaaaaaaa")

问题是:

  1. 当 jinja2.utils 甚至不是 sys.path 的一部分时,python 如何从 /usr/local/lib/python2.7/dist-packages 加载 jinja2.utils?
  2. 为什么python能正确找到jinja2的__init__.py路径,却找不到同目录下的utils.py
~$ ls /home/xxx/.pex/install/Jinja2-2.10.3-py2.py3-none-any.whl.02f611acfe90225e024bd496a640e01844bf5a32/Jinja2-2.10.3-py2.py3-none-any.whl/jinja2/
asyncfilters.py bccache.py compiler.py debug.py environment.py ext.py _identifier.py __init__.py loaders.py nativetypes.py optimizer.py runtime.py tests.py visitor.py
asyncsupport.py _compat.py constants.py defaults.py exceptions.py filters.py idtracking.py lexer.py meta.py nodes.py parser.py sandbox.py utils.py

最佳答案

确认这是一个 pex 问题。

Pex 在开始时加载了 jinja2(其中还包括 jinja2.utils),然后删除了 jinaj2 模块和路径,但失败删除jinja2.utils

最新版本的 pex 已修复该问题:https://github.com/pantsbuild/pex/commit/0f9bf622e1565dcdd27c3b79b788571c9608c272

关于python - python如何从不在sys.path中的路径加载模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58638929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com