use Inline Python => <<'END';
from MYPYTHONLIBRARY import *
END
my $Obj = MYPYTHONLIBRARY->new($a, $b); # line 30
我得到的错误是:
无法通过包“new
”MYPYTHONLIBRARY
找到对象方法“(perhaps you forgot to load "MYPYTHONLIBRARY "?) at /MY/LIBRARY/PATH/MYPERLLIBRARY.pm line 30
”。
所以我在网上搜索,发现
“Inline :: Python检查Python代码和导入的主命名空间 那些名字进入当前包。因此,您必须完全指定 导入类的限定名称:
package TestPy;
use Inline Python => 'from StringIO import StringIO';
my $stringio = TestPy::StringIO->new;"
•Markdown example link
我的问题是,在我的代码中有很多do和require语句,我无法获得完全限定的名称。
Fully::Qualified::name::MYPYTHONLIBRARY->new($a, $b);
那么如何获得我的python库的完全限定名称。
答案 0 :(得分:1)
from MYPYTHONLIBRARY import *
...
...
my $Obj = MYPYTHONLIBRARY->new($a, $b);
您正在导入名为 INSIDE 的名称MYPYTHONLIBRARY.py
。你在这个名为MYPYTHONLIBRARY的文件中有一个类吗?我对此表示怀疑。
以下是您应该做的事情的示例:
~/perl_programs$ ls 9.pl python_lib.py
9.pl python_lib.py
~/perl_programs$ cat python_lib.py
def greet():
print "hello"
class Dog(object):
def __init__(self, name):
self.name = name
def get_name(self):
return self.name
~/perl_programs$ cat 9.pl
use Inline Python;
my $d = Dog->new("Sam");
print $d->get_name() . "\n";
greet();
__END__
__Python__
from python_lib import *
~/perl_programs$ perl 9.pl
Sam
hello
顺便说一句,你不应该在python程序中使用from abc import *
,而且在使用内联python时也不应该这样做。
那么如何获得我的python库的完全限定名称。
您不需要 python 库的完全限定名称 - 您需要将要导入python的perl包的名称。
我的问题是,在我的代码中有很多做和需要 声明,我无法获得完全限定的名称。
一个简单的例子怎么样?