【发布时间】:2019-06-15 19:34:07
【问题描述】:
我已经通过cpan 安装了DBI 模块。 CPAN 已配置为使用本地目录,所以我有~/perl5 和~/.cpan 目录。该模块显然在~/.cpan/build/DBI-1.642-0 中,实际上确实有DBI.pm 文件。
但是,当我执行以下命令作为测试时,该命令提示没有“连接”对象:
$ perl -e 'use lib qw( .cpan/build/DBI-1.642-0/ ); DBI->connect("dbi:SQLite:dbname=foo.sqlite","","");'
Can't locate object method "connect" via package "DBI" (perhaps you forgot to load "DBI"?) at -e line 1.
环境:基于 Debian 的发行版,perl 5.26.2。
注意可能的重复:
- Can't locate object method via package subclassing DBI 询问模块子类化,而不是我在做什么
附录:从 cmets 的讨论中可以看出,很多用户只关注use DBI 声明。正如我在the comments 中提到的:
整个目标是利用通过 cpan 安装的 DBI 模块。在安装 DBD::SQLite 之前,使用 lib 和使用 DBI 都没有给出可行的解决方案。所以单独使用 DBI 的建议没有用。
请注意,在提出问题之前,我已经尝试了 both use DBI 和 use lib qw() 方法。 use DBI 在我的回答中提到,如果不安装 DBD::SQLite 模块,它本身是无效的。
【问题讨论】:
-
你必须
use DBI或添加-MDBI到你的命令行。该构建文件夹用于构建,而不是安装位置。您是否还安装了 DBD::SQLite 和您的操作系统的libsqlite3-dev包?如果您使用cpan安装它,则根本不需要use lib。试试$ perl -MDBI -e 'DBI->connect("dbi:SQLite:dbname=foo.sqlite");'。 -
@simbabque
use DBI从@INC目录列表调用系统范围的 DBI 模块,这显然在基于 Debian 的系统上缺少 SQLite。在任何情况下,use DBI都会产生另一个错误:install_driver(SQLite) failed: Can't locate DBD/SQLite.pmperl -MDBI ...建议也会发生同样的情况 -
DBI 和 SQLite 没有任何关系。它们是不同的模块。但是,如果您使用的是系统 Perl,则应该使用包管理器来安装 DBI 和 SQLite。 packages.debian.org/jessie/libdbi-perl 和 packages.debian.org/jessie/libdbd-sqlite3-perl.
-
@simbabque 谢谢你的建议。在我的个人笔记本电脑上,我当然可以安装两个 debian 包,但是当我要在不同系统上通过 ssh 工作时,我将无法访问 root 级别权限并通过系统包管理器安装包。所以希望我为什么要尝试处理 cpan 更有意义。
-
在这种情况下,您可能需要查看 Perl 的 local::lib 模块,该模块允许您控制在何处安装什么。但是要让 SQLite 工作,你仍然需要 libsqlite3-dev 包。