Python子进程我无法导入其他模块

问题描述 投票:0回答:2

我正在尝试使用 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 有效,但在第二个脚本中则无效。

有什么想法吗?谢谢。

python subprocess
2个回答
3
投票

my_project
模块需要位于您的 PYTHONPATH 中,以便 Python 可以找到它。 PYTHONPATH 包含您当前的工作目录,这就是为什么它在您运行第一个脚本时可以在其中运行的原因。但是当你调用子进程时,cwd 是不同的。因此,您需要将
my_project
的路径添加到 PYTHONPATH 并使用
env
参数显式指定 PYTHONPATH 到
subprocess.call()

但是,以这种方式运行Python代码很尴尬。除非您有阻止这种情况的特定要求,否则我建议使用 multiprocessing 包来在单独的进程中运行 Python 代码。


0
投票

造成这种情况的另一个潜在原因是如果您致电

python script.py
。它可以默认为
python2
,而不是通常的
python3
,后者具有不同的依赖关系。

使用时请务必指定python版本

subprocess.call(['python3', 'script.py'])

© www.soinside.com 2019 - 2024. All rights reserved.