mysql - 如何在自定义 @INC 中使用 DBI 构建 DBD::mysql?
问题描述
我在持续集成构建服务器中构建 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 代理。
解决方案
根据文档,INSTALL_BASE
用于告诉make install
将安装的模块放在哪里:
INSTALL_BASE
INSTALL_BASE
可以传入Makefile.PL
以更改模块的安装位置。INSTALL_BASE
更像是其他人所说的“前缀”PREFIX
。
但它没有告诉perl
在哪里寻找已安装的模块。为此,您可以PERL5LIB
根据文档使用环境变量:
PERL5LIB
在查看标准库之前要在其中查找 Perl 库文件的目录列表。任何特定于体系结构和特定于版本的目录,例如
version/archname/
、version/
或archname/
在指定位置下(如果存在)都会自动包含在内,并在解释器启动时完成此查找。此外,还会添加与 中的条目匹配的任何目录$Config{inc_version_list}
。
推荐阅读
- php - Xdebug 无法使用 XAMPP 开发服务器连接到 Windows 10 上的 VS Code
- google-apps-marketplace - 管理员中的代码 API 默认签名 gsuite 电子邮件
- python - 使用 FuncAnimation 动态更新 3d 散点图/点图中的 ax.text 位置
- powershell - 如何在Powershell中的文件中的每一行上打印/附加行索引号
- dc.js - Sharepoint 错误上的 aspx 页面:仅在呈现数据表时需要功能
- android - 如何在android studio中动态更改src属性?
- apache - httpd 服务正在启动,尽管它在重新启动时无法启动
- php - php 检查字符串的特定格式
- c# - 什么是 C# 中的 Matlab reshape 命令的等价物?如何将 C# 2D 浮点数组转换为 3D 浮点数组?
- vba - 使用 VBA for Mac Word 2016 下载文件