从perl调用python-方法未正确调用

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

我正在尝试从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中。

我有什么想念的吗?

python perl
1个回答
0
投票

这与Perl无关,完全是由于您运行Python脚本的目录。

[当您import一个Python模块时,将在sys.path中列出的目录中搜索该模块。这包括标准库的位置和当前目录。因此,当您从包含Utility.py文件的目录运行时,一切正常。

这里,您可以应用四种明智的解决方案:

  • 在启动Python脚本之前将当前目录更改为app / python。

  • 将模块的位置添加到PYTHONPATH环境变量。

  • 更好:将您的Python脚本转换为可以安装的软件包,然后将其安装在系统上,以便从默认情况下Python所处的位置都可以使用其模块。

  • 甚至更好:使用相对导入,以便完全避免sys.path查找:

from .Utility import DemoCheck
#    ^--
DemoCheck().Hello()
© www.soinside.com 2019 - 2024. All rights reserved.