如何为不同的Perl应用安装专用环境?

24 投票
8 回答
8510 浏览
提问于 2025-04-15 14:20

有没有什么东西在功能上跟Python的virtualenv相似,但适用于Perl呢?

我之前在Python上做过一些开发,能够在一个单独的环境中安装非系统版本的模块,而不会搞得一团糟,这个优势非常大。现在我需要在Perl上做一个新项目,我在找类似于virtualenv的东西,但适用于Perl。你能推荐一个Perl中类似或替代Python的virtualenv的工具吗?

我想为Y个不同的应用程序设置X个不同的非系统Perl包。更糟糕的是,这些应用程序可能需要同一个包的不同版本,所以每个应用可能都需要在一个单独的模块/库环境中安装。对于X小于Y小于3的情况,你可能可以手动处理。但如果X小于Y大于10,就不应该手动去做了。

理想情况下,我希望找到的工具能像这样工作:

perl virtualenv.pl my_environment
. my_environment/bin/activate
wget http://.../foo-0.1.tar.gz
tar -xzf foo-0.1.tar.gz ; cd foo-0.1
perl Makefile.pl
make install # <-- package foo-0.1 gets installed inside my_environment
perl -MCPAN -e 'install Bar' # <-- now package Bar with all its deps gets installed inside my_environment

8 个回答

2

我用过 schroot 来实现这个功能。它比 virtualenv 稍微重一些,但你可以放心,里面不会有不该出现的东西。

Schroot 会为你管理一个 chroot 环境,它会把你的主目录挂载到这个环境里,这样看起来就像是一个正常的命令行会话,只不过是使用 chroot 里的程序和库。

不过我觉得它可能只适用于 debian/ubuntu 系统。

设置好 schroot 后,你上面的脚本会变成这样:

schroot -c my_perl_dev
wget ...

你可以查看 http://www.debian-administration.org/articles/566,那里有一篇有趣的文章介绍这个内容。

3

另外,可以看看 perl-virtualenv,这个工具看起来是对local::lib的一个封装,正如Hobbs所提到的,它会创建一个bin/activate和bin/deactivate的脚本,这样你就可以像使用Python工具一样使用它。

我已经成功使用了大约一个月,没意识到它可能没有达到标准。

这个工具让为Perl设置一个工作环境变得简单多了,因为虽然local::lib会告诉你需要设置哪些变量等等,但perl-virtualenv会创建一个激活脚本,帮你自动完成这些设置。

21

有一个工具叫做 local::lib,它能帮你处理很多事情,跟 virtualenv 有点像。它的功能包括:

  • 在使用它的过程中,设置 @INC,这是一个用来告诉程序去哪里找库的地方。
  • 为子进程设置 PERL5LIB 和其他相关的环境变量。
  • 设置合适的变量,让 CPAN、MakeMakerModule::Build 等工具能够安装库,并把配置存储在本地目录。
  • 设置 PATH,这样安装好的程序可以被找到。
  • 在命令行使用时,打印环境变量到标准输出,这样你可以把 eval $(perl -Mlocal::lib) 放到你的 .profile 文件里,然后大部分时间就不用再管它了。

撰写回答