如何在从两个不同上下文调用的 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.py
和 utilities2.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
。这就是为什么它能够直接访问这两个模块的原因。
如果这不是您想要做的,请进一步解释。
我正在尝试导入一个文件,但我一次只能让它在一个上下文中运行。
这是我的项目结构:
.
├── module/
│ ├── __init__.py
│ ├── script.py
│ ├── utilities1.py
│ └── utilities2.py
└── test.py
script.py
一般是外部直接调用它导入utilities1.py
utilities1.py
导入 utilities2
.py
test.py
是一个包含测试的文件,同时包含 utilities1.py
和 utilities2.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
。这就是为什么它能够直接访问这两个模块的原因。
如果这不是您想要做的,请进一步解释。