当前位置: 首页 > 知识库问答 >
问题:

阻止从当前目录导入Python相对

白嘉志
2023-03-14

我的PythonPath中有一个模块,如下所示:

module.py

from __future__ import absolute_import

import foo

foo.do_something()

print("I am a module!")

我稍后使用python-m module调用此脚本。这个脚本大部分时间都可以工作,但我发现我被CD到了一个目录中,其中有一个文件夹,里面有foo/__init__.py,Python更喜欢这个文件夹,而不是我的PythonPath中的其他foo模块。我认为这是因为Python将foo文件夹视为一个隐式的、相对的导入(我使用的是Python2.7)。

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

module.py和我使用的每个其他模块都包含了来自__future__import absolute_import的。因此,现有的问题(如Python:禁用相对导入)并不能解决这个问题。


共有1个答案

康言
2023-03-14

您可以从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!")
 类似资料:
  • 我有一个名为的脚本,代码如下(我已经大大简化了事情): 但我不仅仅有一个名为的脚本。我有许多名为的脚本,按以下目录结构组织: 每个都有一个稍微不同的实现。我想对做的是通过导入每个脚本并对其运行一些测试来测试所有脚本。下面是一些代码(*'s表示伪代码) 我该怎么做?特别是,如何迭代导入脚本,例如,?

  • 问题内容: 如何从父目录进行相对导入? 来自: 这给出了一个模棱两可的错误: 如何从父目录本地导入? 问题答案: 感谢您添加到您的问题。首先是一个答案,然后是一些解释。我建立了您的代码, 去获得,就像你拥有它一样。(我忽略了错误消息。) 如您所愿,将导入行设置回“ ../../../meme”。 (注释掉一些包含未使用变量的代码。) 然后在梅梅/ CMD /米姆目录,要么或者工作。 刚才我说去安装

  • 问题内容: 我有以下内容: 我正在尝试从父目录导入。在这种情况下,我尝试从测试文件夹中运行“ UnitTest1.py”,并从其上方的目录(文件“ ModuleFile.py”)导入。 我知道已经有很多答案。 SO问题1,SO问题2,其他所有SO问题。我只是找不到“使用../”作为相对导入而不是显式路径。 我知道从Python 2.5开始,根据提到使用的文档,它们支持“相对导入”,但是我专门尝试这

  • 我有以下目录结构: b、 py需要在a.py中导入一个类。因此,我可以在导入a之前将以下行添加到b.py。 sys.path.append(os.path.dirname(sys.argv[0])) 这是可行的,我可以从任何目录调用b.py,它也可以导入a。但是,当我在另一个目录中编写脚本以使用execfile()调用此文件时,这将失败。 我尝试了相对导入,但得到了“在非包错误中尝试相对导入” 我

  • 问题内容: 我有一个名为“ ClassA”的Python类,另一个应该导入“ A ClassB”的ClassA的Python类。目录结构如下: 我将如何使用,以便ClassB可以使用ClassA? 问题答案: 您确实应该使用软件包。然后将MainDir放置在文件系统中sys.path上的某个点(例如… / site- packages)上,然后可以在ClassB中说: 您只需要在每个目录中放置命名

  • 问题内容: 在Python中,我可以使用哪些命令来查找: 1.当前目录(运行Python脚本时我在终端中的位置) 2.我正在执行的文件在哪里? 问题答案: 要获取包含Python文件的目录的完整路径,请在该文件中写入以下内容: (请注意,如果你已经习惯于更改当前的工作目录,则上述方法将不起作用,因为常量的值是相对于当前的工作目录而言的,并且不会被调用更改。) 要获取当前的工作目录,请使用 上面使用