我正在尝试从Perl脚本中调用python脚本。 python脚本导入另一个python文件。 Perl文件和python文件放置在不同的目录中。当我尝试直接运行python脚本时,它将调用导入python文件的构造函数和导入文件的另一种方法,并且可以成功工作。但是,当我尝试从Perl脚本执行相同操作时,将调用唯一的构造函数。
Utility.py
Class DemoCheck :
def Hello():
print("Hello")
Utility(self):
print("Constructor calling")
run.py
import Utility
const = Utility.DemoCheck
const.Hello()
当我直接运行run.py
时。输出将是第一个构造函数打印,然后是hello方法打印。当我尝试从Perl脚本python /app/python/run.py
调用它时,唯一的构造函数是print而不是hello方法print。
两个python目录都放置在文件夹/app/python
中,而Perl脚本放置在文件夹app/perl
中。
我有什么想念的吗?
这与Perl无关,完全是由于您运行Python脚本的目录。
[当您import
一个Python模块时,将在sys.path
中列出的目录中搜索该模块。这包括标准库的位置和当前目录。因此,当您从包含Utility.py
文件的目录运行时,一切正常。
这里,您可以应用四种明智的解决方案:
在启动Python脚本之前将当前目录更改为app / python。
将模块的位置添加到PYTHONPATH环境变量。
更好:将您的Python脚本转换为可以安装的软件包,然后将其安装在系统上,以便从默认情况下Python所处的位置都可以使用其模块。
甚至更好:使用相对导入,以便完全避免sys.path
查找:
from .Utility import DemoCheck
# ^--
DemoCheck().Hello()