如何在自定义 @INC 中使用 DBI 构建 DBD::mysql?

Posted

技术标签:

【中文标题】如何在自定义 @INC 中使用 DBI 构建 DBD::mysql?【英文标题】:How to build DBD::mysql with DBI in a custom @INC? 【发布时间】:2021-11-24 13:59:25 【问题描述】:

我正在一个持续集成构建服务器中构建 DBI 和 DBD::mysql。 DBI 的构建是成功的,如下面的构建日志的摘录所示。它清楚地将 DBI/DBD.pm 安装在正确的位置。

pushd DBI-1.643

perl Makefile.PL INSTALL_BASE=/data/pods/mysql-tools/mysql-tools/current

...
Installing /data/pods/mysql-tools/mysql-tools/current/lib/perl5/x86_64-linux-thread-multi/DBI/DBD.pm
...
Appending installation info to /data/pods/mysql-tools/mysql-tools/current/lib/perl5/x86_64-linux-thread-multi/perllocal.pod

但是 DBD::mysql 的下一部分构建失败,因为它找不到 DBI 安装的文件。

pushd DBD-mysql-4.050

perl Makefile.PL INSTALL_BASE=/data/pods/mysql-tools/mysql-tools/current --ssl

Can't locate DBI/DBD.pm in @INC (@INC contains:
/usr/local/lib64/perl5 
/usr/local/share/perl5
/usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl
/usr/lib64/perl5 
/usr/share/perl5 .) 
at Makefile.PL line 15.

您可以看到,DBD::mysql 的 MakeMaker 根本没有将安装位置添加到其@INC。它只有默认目录。

有没有办法将参数传递给 MakeMaker 以将安装目录添加到 @INC?我想我可以对其进行硬编码,但这似乎不合适且难以维护。有没有更好的方法自动将INSTALL_BASE/lib/perl5/<arch> 添加到@INC

环境:

CentOS 7 Linux Perl 5.16.3

我当然更喜欢使用 cpanm。但是由于我雇主的安全政策,CI 构建服务器与 Internet 隔离。 CI 不允许使用 http 代理。

【问题讨论】:

读取“perldoc perlrun”,使用 -I 开关(大写“i”)传递附加目录 在运行perl Makefile.PL 之前尝试设置您的PERL5LIB 环境变量,例如在您的~/.bashrc 初始化文件中 【参考方案1】:

根据the documentation,INSTALL_BASE用于告诉make install将安装的模块放在哪里:

安装基础

INSTALL_BASE 可以传递到Makefile.PL 以更改您的位置 模块将被安装。 INSTALL_BASE 更像其他人 调用“前缀”而不是PREFIX

但它并没有告诉perl 在哪里寻找已安装的模块。为此,您可以使用环境变量PERL5LIB,根据the documentation:

PERL5LIB

在其中查找 Perl 库文件的目录列表 在标准库中查找。任何特定于架构的和 特定于版本的目录,例如 version/archname/version/ 或 指定位置下的archname/ 自动包含如果 它们存在,这种查找在解释器启动时完成。在 此外,任何与中的条目匹配的目录 $Configinc_version_list 已添加。

【讨论】:

谢谢,我通过运行PERL5LIB=/data/pods/mysql-tools/mysql-tools/current/lib/perl5 perl Makefile.PL ...得到它的工作

以上是关于如何在自定义 @INC 中使用 DBI 构建 DBD::mysql?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 DBI 从数据库中读取中文文本?

Ruby 数据库访问 - DBI 教程

在自定义 .plist 文件中使用用户定义的构建设置

如何在自定义 OleDB 驱动程序中显示浏览按钮

如何在自定义函数中使用 mutate 创建新列

如何使用 Codeigniter 在自定义 404 页面中重定向 404 错误?