无法找到DBI.pm

34

我正在尝试启动这个脚本:

#!/usr/bin/perl 

use DBI;

my $dbh = DBI->connect( 'dbi:Oracle:host=lonlin2;sid=TIMFX1AD;port=1524','xbsesdbo','xbsesdbo123' )  || die ( $DBI::errstr . "\n" );

my $query= "SELECT * FROM product_elements WHERE element_id = 1001";
my $queryHandler= $dbh->prepare($query);

my $result= $queryHandler->execute();


open(fileHandler,"> note.txt");

print fileHandler "Risultato query: $result\n";

my $e= $dbh->disconnect();
close(fileHandler);

当我运行这个脚本时,我收到了以下错误信息:

在@INC中找不到DBI.pm(@INC包含:/opt/perl_32/lib/5.8.3/IA64.ARCHREV_0-thread-multi /opt/perl_32/lib/5.8.3 /opt/perl_32/lib/site_perl/5.8.3/IA64.ARCHREV_0-thread-multi /opt/perl_32/lib/site_perl/5.8.3 /opt/perl_32/lib/site_perl /opt/perl_32/lib/vendor_perl/5.8.3/IA64.ARCHREV_0-thread-multi /opt/perl_32/lib/vendor_perl/5.8.3 /opt/perl_32/lib/vendor_perl .),位于./prova.pl第3行。

我已经安装了所有必要的软件!DBI.pm也已经被安装了!

3
如果你已经安装了它,那么你可能是使用/为不同的perl安装了它,或者你指示Perl将其安装到非标准目录,但你没有告诉perl查找该目录。 1)你是如何安装它的?2)DBI.pm的完整路径是什么? - ikegami
尝试使用命令 perldoc -l DBI。如果已安装DBI.pm并且在Perl的Include路径中,您将看到安装位置。您的系统上可能安装了多个Perl版本,并且您可能正在访问错误的版本。你的shebang行是怎样的?我使用 #! /usr/bin/env perl 来选择我的Path使用的Perl版本,并使用Perlbrew来处理多个Perl版本。 - David W.
在上面的错误信息中列出的哪个目录中安装了它? - runrig
6个回答

57

如果您拥有 root 权限,请在控制台中输入以下内容(适用于 Debian/Ubuntu):

sudo apt-get install libdbi-perl

12

如果您没有Active Perl(因此没有ppm),您也可以按照以下方式获取DBI:

perl -MCPAN -e 'install DBI'

您可能需要像这样为Postgres安装驱动程序:

perl -MCPAN -e 'install DBD::Pg'

谢谢,它可以工作了!但是,我必须使用“sudo”运行它,因为我没有足够的权限。我已经使用“sudo perl -MCPAN -e 'install DBI'”安装了它。 - Aleksey Kuznetsov

9

对于RedHat/CentOS用户:

sudo yum -y install perl-DBI

3

DBI不在您的@INC路径中,这告诉Perl查找自定义模块的位置。这可能是因为您使用cpan工具作为非根用户安装它们,而这将没有写入默认包含路径的权限。

您需要定位DBI.pm和其他软件包,并将它们移动到您的@INC路径中。

或者,找到您已安装的软件包并将安装路径添加到您的库路径中,以供一次性使用:

PERL5LIB=/path/to/modules perl yourscript.pl

对于一个更加永久的解决方案,请将以下内容添加到~/.bashrc中:

export PERL5LIB=/path/to/modules

我该如何找到DBI包的路径? - chaw359
@chaw359 在类UNIX操作系统上,可以使用命令 find / -name 'DBI.pm' 2>/dev/null 来查找。 - Glitch Desire
@chaw359 - 你是怎么安装的? - Quentin
我在哪里使用 "PERL5LIB=/path/to/modules perl yourscript.pl"?是在代码中还是Unix命令?请给我一个例子:D - chaw359
1
@chaw359 这将在你运行脚本时在命令行上执行。 - Glitch Desire

0
对于Alpine用户,请使用perl-dbiapk add perl-dbi


0

针对 Arch Linux 用户:

sudo pacman -S perl-dbi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接