Perl 中的核心、供应商和站点位置之间有什么区别?

2023-11-25

我最近在安装某些模块时遇到了一些麻烦,并惊讶地发现许多已安装的模块都有重复的安装和版本。尝试使用以下命令跟踪标准(如果有这样的东西)安装中的内容cpanm,我发现以下结果非常令人困惑。

报告显示了这些位置:

  • Using cpan -V:
# cpan -V

/usr/bin/cpan script version 1.672, CPAN.pm version 2.22
--------------------------------------------------
Checking install dirs...
Checking core
        + /usr/share/perl5/5.26
        + /usr/lib/perl5/5.26/x86_64-cygwin-threads
Checking vendor
        + /usr/share/perl5/vendor_perl/5.26
        + /usr/lib/perl5/vendor_perl/5.26/x86_64-cygwin-threads
Checking site
        + /usr/local/share/perl5/site_perl/5.26
        + /usr/local/lib/perl5/site_perl/5.26/x86_64-cygwin-threads
Checking PERL5LIB
        no directories for PERL5LIB
Checking PERLLIB
        no directories for PERLLIB
  • Using perl -V:.*site.*:
# perl -V:.*site.* |column -t -s "=" |sort -d -i -k 1.22

d_sitearch           'define';
usesitecustomize     'undef';
siteprefix           '/usr/local';
siteprefixexp        '/usr/local';
installsitebin       '/usr/local/bin';
installsitescript    '/usr/local/bin';
sitebin              '/usr/local/bin';
sitebinexp           '/usr/local/bin';
sitescript           '/usr/local/bin';
sitescriptexp        '/usr/local/bin';
installsitearch      '/usr/local/lib/perl5/site_perl/5.26/x86_64-cygwin-threads';
sitearch             '/usr/local/lib/perl5/site_perl/5.26/x86_64-cygwin-threads';
sitearchexp          '/usr/local/lib/perl5/site_perl/5.26/x86_64-cygwin-threads';
installsitehtml1dir  '/usr/local/share/doc/perl/html/html1';
sitehtml1dir         '/usr/local/share/doc/perl/html/html1';
sitehtml1direxp      '/usr/local/share/doc/perl/html/html1';
installsitehtml3dir  '/usr/local/share/doc/perl/html/html3';
sitehtml3dir         '/usr/local/share/doc/perl/html/html3';
sitehtml3direxp      '/usr/local/share/doc/perl/html/html3';
installsiteman1dir   '/usr/local/share/man/man1';
siteman1dir          '/usr/local/share/man/man1';
siteman1direxp       '/usr/local/share/man/man1';
installsiteman3dir   '/usr/local/share/man/man3';
siteman3dir          '/usr/local/share/man/man3';
siteman3direxp       '/usr/local/share/man/man3';
installsitelib       '/usr/local/share/perl5/site_perl/5.26';
sitelib              '/usr/local/share/perl5/site_perl/5.26';
sitelib_stem         '/usr/local/share/perl5/site_perl/5.26';
sitelibexp           '/usr/local/share/perl5/site_perl/5.26';
  • Using @INC:
# perl -e 'print join("\n",@INC,"")'

/usr/local/lib/perl5/site_perl/5.26/x86_64-cygwin-threads
/usr/local/share/perl5/site_perl/5.26
/usr/lib/perl5/vendor_perl/5.26/x86_64-cygwin-threads
/usr/share/perl5/vendor_perl/5.26
/usr/lib/perl5/5.26/x86_64-cygwin-threads
/usr/share/perl5/5.26

结果是cpan-outdated -p --verbose显示与之前完全不同(且更短)的过时模块列表cpan -lO做。不用说,模块安装在各处,我不知道如何理解是否有默认安装位置及其位置,或者should go.


QUESTION:

  1. 那么两者有什么区别core, vendor and site type路径?
  2. 为什么每种类型有 2 条路径?

这些安装位置的最佳参考可能是ExtUtils::MakeMaker有关安装位置的文档。在本质上:

  • core(也称为privlib) - 是随 Perl 安装的核心模块所在的位置。在早于 5.12 的 Perls 上,双重生命模块的更新也需要安装在核心版本上,而不是安装到站点或供应商库中,因为 privlib 排在第一位@INC5.12之前。这在 Perl 系统中尤其危险,其中 privlib 中的文件通常由包管理器管理。
  • vendor- 是分发供应商可以安装模块的位置。这通常是系统包管理器安装非核心模块的地方。
  • site- 是 CPAN 客户端在直接调用时安装模块的位置,除非出现异常配置(如上述双寿命模块)。

(双生命模块是核心模块,在 CPAN 上也可以单独使用,这意味着您可以安装更新版本。)

每个库位置都有一个arch变体,这是安装具有特定于构建的输出文件的发行版的位置。没有动态配置的纯 Perl 发行版被安装到标准的与体系结构无关的目录中,并且通常可以在 Perl 和体系结构的其他安装中未经修改地运行,只要它们的要求仍然得到满足(尽管这不是一个好主意,除非你真的知道你是什么正在做)。具有任何已编译 XS 模块或在构建过程中动态生成模块的发行版均安装到arch目录,并且从另一个 Perl 中使用是不安全的。

所有这些位置都是在构建 Perl 时配置的,并且可以使用perl -V如您所示的选项。他们还各自有陪伴script and bin目录(通常是相同的)和手册页目录。

至于差异cpan-outdated- 这个工具(像许多使用的工具一样ExtUtils::已安装)仅限于查找具有装箱单,它们在使用 CPAN 客户端安装模块时包含,但不包含在核心模块中,并且通常从供应商软件包中删除。所以最有可能的是cpan-outdated只会发现模块sitelib,但这通常就是您需要找到的全部内容。我不确定 cpan 命令使用什么机制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Perl 中的核心、供应商和站点位置之间有什么区别? 的相关文章

  • 当一个模块安装了两个版本时 Perl 会做什么?

    我在正在使用的远程机器上没有 root 访问权限 因此我使用 cpanm 和 local lib 的组合 如下所述here https stackoverflow com a 2980715 1156644将 CPAN 模块安装到我的本地目
  • Perl Mongo 查找对象 ID

    你会认为这是一件简单的事情 我有一个集合中的对象 ID 列表 我想根据对象 ID 获取单个记录 谷歌搜索过 但没有任何帮助 所以我有对象 ID 5106c7703abc120a04070b34 my client MongoDB Mongo
  • perl imap 将邮件移至垃圾箱 (Mail::IMAPClient)

    我需要将所有未见的邮件移至垃圾箱 然后从收件箱中删除 my inbox imap gt select Inbox my mails imap gt unseen foreach my msgid mails imap gt set flag
  • 我的 Perl 脚本中的 findnodes 语句有什么问题?

    我有一个简单的 xml 文件 如下所示
  • 使用 Perl 分割大文本文件

    我必须将一个 1 8Tb 的大文本文件分成两部分 我只需要文件的后半部分 该文件有 n作为记录分隔符 I tried perl ne print if gt line to start from test txt gt result txt
  • Git 显示更改后的相同文件

    当我似乎无法弄清楚更改时 Git 向我显示整个文件已更改 这是 cygwin git 但它也发生在 msysgit 中 git version git version 2 1 1 diff lt git show HEAD File cs
  • 将参数传递给调试器中的 perl 文件并在系统执行的文件中设置断点

    因此 我使用 perl d file pl 在 perl 调试器中运行一个文件 但 file pl 也应该接受参数 如何向 file pl 提供参数 还有一个问题 file pl 中有这一行 system file2 pl 如果 file2
  • 如何将文本转换为标题大小写?

    我有一个文本文件 其中包含需要更改为标题大小写的标题列表 单词应以大写字母开头 但大多数冠词 连词和介词除外 例如 这个书名列表 barbarians at the gate hot flat and crowded A DAY LATE
  • Moose:属性值更改时缓存的计算结果会过期吗?

    在我们的类中 我们有一个模式 我们创建一个属性来表示 计算值 出于显而易见的原因 我们想要缓存计算值 然后当基础值之一发生变化时使缓存失效 所以我们目前有这个 package FooBar use Moose has foo gt acce
  • 无法安装 WWW::Curl::Easy: SZBALINT/WWW-Curl-4.17.tar.gz : make NO

    我正在尝试在我的 Fedora 26 机器上安装 WWW Curl Easy gcc c I usr include D REENTRANT D GNU SOURCE O2 g pipe Wall Werror format securit
  • 如何在 Perl 脚本中包含另一个文件中的函数?

    这似乎是一个非常简单的问题 但不知何故 我的 Google Fu 失败了 在 Perl 中包含其他文件中的函数的语法是什么 我正在寻找类似C的东西 include blah h 我看到了使用 Perl 模块的选项 但这似乎需要对我当前的代码
  • 在 FOR 循环中打印唯一值

    我有两个文件 myresult 和 annotation 两个文件中的数据似乎是范围 但事实并非如此 这就是为什么我无法将其存储在数组中 我需要使用拆分运算符 以便我可以在 for 循环中使用它并进行比较 现在我需要打印 i myresul
  • 由于 lpcap,CPAN 安装 Net::Pcap 和 Packet 模块失败

    最近 我尝试通过 cpan 安装 perl 模块 Net Packet 和 Net Pcap 但它抱怨找不到 pcap 库 所以我正在搜索 cpan 在安装模块时是否接受外部 lib include 目录 但到目前为止还没有运气 looki
  • Perl 的反引号、system 和 exec 有什么区别?

    有人可以帮帮我吗 在 Perl 中 以下之间有什么区别 exec command and system command and print command 还有其他方法可以运行 shell 命令吗 exec 执行命令并一去不复返 这就像一个
  • 在 qx 运算符中将 perl 数组拆分为单独的参数

    我试图将一组参数传递给qx操作员 考虑 my files qw A txt B txt print qx ls files 这给出了错误 ls cannot access A txt B txt No such file or direct
  • Perl:测试输入阅读器?

    有没有一种方法可以使用标准 Test 等模块自动测试 Perl 程序是否正在读取输入 例如标准输入正确吗 例如 测试一个从 STDIN 读取两个整数并打印它们之和的程序 这不是 100 清楚你的意思 我会回答假设你想编写一个测试脚本来测试你
  • 在 Windows 7 中使用 ActivePerl @ARGV 为空

    我有以下 Perl 脚本 我正在尝试使用 ActivePerl 在 Windows 7 中运行它 c Perl64 bin perl exe w use strict my mp3splt exe c Program Files x86 m
  • 检查一个数字是 int 还是 float

    在perl中 我想检查给定变量是否包含浮点数 为了检查我正在使用的 my Var 0 02 Floating point number if int Var Var floating point number 但上面的代码对于 0 0 不起
  • 如何在 Perl 中复制整个目录?

    我需要将整个目录复制到某个位置 最好的方法是什么 File Copy正如我所见 仅逐个文件复制 顺便说一句 我在Windows下工作 感谢帮助 也许调查一下文件 复制 递归 http metacpan org pod File Copy R
  • 自定义 SSH 端口上的 Git

    我的 VPS 提供商建议我将 SSH 端口保留为他们默认分配的自定义端口号 不是 22 问题是 虽然我知道我可以在创建远程配置时提供端口号 但在进行 Git 克隆时似乎无法提供相同的操作 我在用gitolite https wiki arc

随机推荐

  • Spring MVC - 在 JSP 视图中没有获取价值[重复]

    这个问题在这里已经有答案了 首先 我是 Spring MVC 领域的新手 我制作了一个简单的程序 其中 Spring MVC 将处理 GET 请求并设置一个名为 message 的变量 该变量应在 JSP 中显示设置值 但未按预期执行 代码
  • 如何使用 RAND(seed) 对 MySQL 中的行进行采样?

    我需要使用 MySQL 从表中获取可重复的随机行集 我使用 MySQL RAND 函数实现了这一点 并使用行的 bigint 主键作为种子 有趣的是 这产生的数字看起来根本不是随机的 谁能告诉我这里发生了什么以及如何让它正常工作 selec
  • SignTool 未使用 SHA256 签署 ClickOnce 应用程序,仅使用 SHA1

    我正在尝试签署我的 clickonce 应用程序 我有一个使用 SHA256 的 EV 代码签名证书 问题是 当我使用构建后命令签署我的应用程序时 它似乎使用 SHA1 而不是 SHA256 这是输出窗口的剪辑 Running Code A
  • 如何将具有动态键的文档映射到 Spring MongoDb 实体类

    我有一个可以具有动态键名称的文档 id ObjectId 51a29f6413dc992c24e0283e envinfo appName MyJavaApp environment cpuCount 12 heapMaxBytes 572
  • 为什么 ICollection 同时实现 IEnumerable 和 IEnumerable

    为什么ICollection
  • 在 python 中对文本文件的内容进行排序后,文件中出现空行

    我有这个小脚本可以对文本文件的内容进行排序 The built in function open opens a file and returns a file object Read mode opens a file for readi
  • i386 架构的未定义符号:“_utf8_nextCharSafeBody”,引用自:”

    如何清除这个错误 请帮助我 我不知道套接字过程 i386 架构的未定义符号 utf8 nextCharSafeBody 引用自 SRWebSocket o 中的 validate dispatch data partial string l
  • __path__ 有什么用?

    我从来没有注意到 path 今天之前在我的一些包上定义的属性 根据文档 套餐支持多一特价 属性 path 这是 初始化为一个列表 其中包含 保存目录的名称 包的 init py代码之前 在该文件中被执行 这 变量可以修改 这样做 影响未来对
  • Delphi Statictext字体颜色变化无样式

    我想将 StaticText 字体颜色从黑色更改为clBlue 我该怎么办 目前我正在做 StaticText Font Color clBlue 但这对颜色没有影响 我能做些什么 谢谢 The TStaticText控件是 Win32 的
  • 损坏的 Java Mac 10.6

    一些背景 在 Mac OS X 10 6 上使用 Macports 我有DYLD LIBRARY PATH在我的 bash profile 中设置 问题 当我跑步时java version我收到此错误 VM初始化期间发生错误无法加载本机库
  • 前导美元符号如何影响 Bash 中的单引号?

    我需要从 Bash CLI 将字符串作为其参数传递给程序 例如 program don t do this 该字符串可以包含任何字符 例如 等等 我不希望 Bash 做任何修改 所以我考虑使用单引号 但是以下方法不起作用 program d
  • Maven Javascript 压缩器

    我想知道如何使用 maven 压缩 javascript 文件 我已经访问过类似的网站http mojohaus org javascript maven tools guide webapp development html但没有解释实施
  • iPhone 企业部署:移动设备管理

    我在企业中阅读有关 iPhone 的资料 看到了一些有关移动设备管理服务器的内容 据我所知 有一些第 3 方 MDM 供应商 但 Apple 表示可以实施自己的供应商 iPhone 配置实用程序允许您为 MDM 设置服务器 URL 签入 U
  • PHP 正则表达式和 JavaScript 正则表达式之间的区别

    您好 我想在 spry java 脚本框架中使用下面的 php 正则表达式 但它们不适用于 spry 框架 并且 spry 不允许用户输入 1 d 2 x 600 x 6FF s x 600 x 6FF u 3 x 600 x 6FF d
  • 如何跟踪 Javascript 事件(堆栈跟踪)?

    在任何编程语言中 我都可以跟踪任何函数并知道哪个函数被其他函数调用 但在 Javascript 中 我不知道如何 因为代码不是我写的据我所知 Firebug 没有提供此功能 一个例子 我想显示单击 XYZ 元素时调用的每个函数的函数名称 并
  • 使用 Lambda 和递归函数调用了解 QTimer

    我有以下代码 void class Testfunc QTimer timer new QTimer QObject connect timer QTimer timeout this emit Log Time out TestFunc
  • 如何在 Twig 过滤器“替换”中使用变量

    从 php 的表单中移交一个数组 repl arr array serach string1 gt replace1 对于 Twig 模板 我想在每个替换过滤器中替换 Twig 变量中的字符串 如下所示 block replace repl
  • Excel 和 EPPlus .NET 库:高级下拉列表验证

    在 Epplus 中 当我们为 Excel 文件中的某些单元格创建下拉列表时 然后用户输入一个不属于列表的值 该单元格会显示一条消息 值必须与列出的项目之一匹配 除了此消息之外 是否可以阻止用户输入不属于下拉列表的值 提前致谢 我用下面的代
  • 使用陈述问题

    我有两个问题 1 是否应该始终在连接上使用 using 语句 那么 我会在连接上使用它 然后在连接内的阅读器上使用另一个吗 所以我会使用两个 using 语句 2 假设您在连接上使用 using 语句 并且在连接上返回了一个读取器 所以你有
  • Perl 中的核心、供应商和站点位置之间有什么区别?

    我最近在安装某些模块时遇到了一些麻烦 并惊讶地发现许多已安装的模块都有重复的安装和版本 尝试使用以下命令跟踪标准 如果有这样的东西 安装中的内容cpanm 我发现以下结果非常令人困惑 报告显示了这些位置 Using cpan V cpan