python - 防止Python从当前目录相对导入

标签 python import

我的PYTHONPATH中有一个模块看起来像这样:

模块.py

from __future__ import absolute_import

import foo

foo.do_something()

print("I am a module!")

我稍后使用 python -m module 调用此脚本。该脚本在大多数情况下都有效,但我发现我被 cd 到一个目录中,该目录中有一个带有 foo/__init__.py 的文件夹。在其中,Python 更喜欢该文件夹而不是其他 foo我的模块PYTHONPATH 。我认为这是因为 Python 正在处理 foo文件夹作为隐式相对导入(我使用的是 Python 2.7)。

如何让 Python 不将 $PWD 中的文件夹视为隐式相对导入?

来自 __future__导入绝对导入不起作用

module.py我使用的每个其他模块都有 from __future__ import absolute_import包括。所以现有的问题如 Python: Disabling relative import不解决这个问题。

最佳答案

您可以从sys.path中删除当前目录,或者将foo模块的目录放在sys.path的顶部

# at the very beginning of module.py
import sys

sys.path = sys.path[1:]
# or
sys.path.insert(0, <directory of foo module>)

# your code ...
from __future__ import absolute_import

import foo

foo.do_something()

print("I am a module!")

关于python - 防止Python从当前目录相对导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62778734/

相关文章:

python - 无法从 get-pip.py 安装 pip

python - 开发Python包时如何缩短导入语句?

python - 类似Python中的包含?

django - Eclipse/PyDev/Django 导入需要项目名称

scala - 为什么我的嵌套伴生对象的成员在类中不自动可见?

python - 安装 PIL 适用于 sudo,不能在 venv 中使用

python - Flask-Mail - 基于 Flask-Cookiecutter 异步发送电子邮件

python - 导入模块,Levenshtein

python - 如何在 Perl 和/或 C 中池化 Shell 进程

PythonAnywhere:导入 Mechanize 给出 ImportError,但 pip 给出 "Already satisfied"