【问题标题】:How can I specify the version of Python that Perl's Inline::Python module is using?如何指定 Perl 的 Inline::Python 模块正在使用的 Python 版本?
【发布时间】:2013-08-25 06:00:00
【问题描述】:

我正在运行 Debian Squeeze 和 perl v5.10.1,我安装了两个版本的 python:

$ pyversions -i
python2.5 python2.6

Python::Inline 使用 python2.5 很明显:

$ perl
use Inline::Python;
Inline::Python::py_eval('import sys');
Inline::Python::py_eval('print sys.version');

2.5.5 (r255:77872, Nov 28 2010, 17:10:16)
[GCC 4.4.5]

我需要 python2.6 来运行我的 python 代码。我怎样才能做到这一点?

【问题讨论】:

  • 哇。 Perl 中的 Python。从“有不止一种方法可以做到”到“只有一种方法可以格式化”......令人兴奋。

标签: python perl inline


【解决方案1】:

您在安装模块期间链接到所需的版本。见Makefile.PL

#============================================================================
# What python are we going to try?
#============================================================================
my @pythons;
my $sep = $^O eq 'MSWin32' ? ";" : ":";
for $p (split /$sep/, $ENV{PATH}) {
    $p =~ s/^~/$ENV{HOME}/;
    $p .= "/python";
    push @pythons, { path => $p } if -f $p && -x $p;
}

# Keep them in PATH order.
#@pythons = sort { $a->{path} cmp $b->{path} } @pythons;

my $num = 1;
print "Found these python executables on your PATH:\n";
print $num++ . ". " . $_->{path} . "\n" for @pythons;

my $sel = prompt("Use which?", '1');
$sel = $pythons[$sel-1] if $sel =~ /^\d+$/;
$sel = { path => $sel } unless ref $sel eq 'HASH';

print "Using $sel->{path}\n";

【讨论】:

    【解决方案2】:

    此答案明确针对问题标签,而不是针对用户针对 python 2.5 或 python 2.6 发布问题的特定环境:

    如何指定 Perl 的 Inline::Python 模块使用的 Python 版本? => 当您的操作系统同时具有 python 3.x 和 python 2.x 时,它会选择您在终端/命令行中键入 python 时显示的 python。 因此,当您必须在 3.x 和 2.x 之间进行选择时,Makefile.PL 不会问您这个问题,而是会选择带有 python 的那个(通常是带有 ubuntu 的 python2.x,其中 python 会给我们 python2.x)

    解决方案:在 Makefile.PL 中将 $p 值更改为 "/python3" 如下所示,它会选择正确的 python 版本。 注意:要进行此更改,您需要通过此方法安装 perl 包click here

    #============================================================================
    # What python are we going to try?
    #============================================================================
    my @pythons;
    my $sep = $^O eq 'MSWin32' ? ";" : ":";
    for $p (split /$sep/, $ENV{PATH}) {
        $p =~ s/^~/$ENV{HOME}/;
        $p .= "/python3";
        push @pythons, { path => $p } if -f $p && -x $p;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 2018-01-28
      • 1970-01-01
      相关资源
      最近更新 更多