我正在尝试使用 python 子进程来执行脚本,这让我感兴趣能够导入我的项目。当在另一个进程中运行时,我只有典型的模块,而在导入时没有我的项目的模块。如何导入我的模块?
示例:
first_script.py
import subprocess
from my_project.any_module import any_module
def __init__(self):
subprocess.call(['python', 'path/to/exec/second_script.py'])
第二个脚本.py
from my_project.any_module import any_module
def __init__(self):
print any_module.argument
在第一个脚本中, import any_module 有效,但在第二个脚本中则无效。
有什么想法吗?谢谢。
my_project
模块需要位于您的 PYTHONPATH 中,以便 Python 可以找到它。 PYTHONPATH 包含您当前的工作目录,这就是为什么它在您运行第一个脚本时可以在其中运行的原因。但是当你调用子进程时,cwd 是不同的。因此,您需要将 my_project
的路径添加到 PYTHONPATH 并使用 env
参数显式指定 PYTHONPATH 到 subprocess.call()
。
但是,以这种方式运行Python代码很尴尬。除非您有阻止这种情况的特定要求,否则我建议使用 multiprocessing 包来在单独的进程中运行 Python 代码。
造成这种情况的另一个潜在原因是如果您致电
python script.py
。它可以默认为 python2
,而不是通常的 python3
,后者具有不同的依赖关系。
使用时请务必指定python版本
subprocess.call(['python3', 'script.py'])