如何在从两个不同上下文调用的 python 脚本中执行导入语句

How to do a import statement in a python script that gets called from two different contexts

我正在尝试导入一个文件,但我一次只能让它在一个上下文中运行。

这是我的项目结构:

.
├── module/
│   ├── __init__.py
│   ├── script.py
│   ├── utilities1.py
│   └── utilities2.py
└── test.py

script.py一般是外部直接调用它导入utilities1.py

utilities1.py 导入 utilities2.py

test.py 是一个包含测试的文件,同时包含 utilities1.pyutilities2.py

我的问题是如何在utilities1.py中做导入语句 当我从 script.py 调用它时,它需要是

import utilities2

但是当我从 test.py 调用它时会导致错误要求它是

import module.utilities2

有没有办法让我在两种情况下都正确地导入语句? 或者我是否需要在我的项目中改变一些结构? 谢谢 :)

如果您想要使用 test.py 中的 import utilities1,您可以修改模块的搜索路径。 sys.path 是解释器将在其中查找要导入的模块的路径列表。做 print(sys.path) 你会看到的。您也可以在 运行 您的脚本时修改它。

例如,与您描述的文件结构保持一致

# script.py

import utilities1
import utilities2

utilities1.show_myself()
utilities2.show_myself()

# utilities1.py

def show_myself():
    print("I'm utilities1")

def test_myself():
    print("Testing who I am... The answer: utilities1")

# utilities2.py

def show_myself():
    print("I'm utilities2")

def test_myself():
    print("Testing who I am... The answer: utilities2")

# test.py

import sys

sys.path.insert(1, "module")

import utilities1
import utilities2

utilities1.test_myself()
utilities2.test_myself()

test.py 中,我在 sys.path 中插入了 module,这是 运行 脚本查找模块 utilities1 的相对路径或 utilities2。这就是为什么它能够直接访问这两个模块的原因。

如果这不是您想要做的,请进一步解释。