【发布时间】:2020-08-21 05:41:27
【问题描述】:
我正在尝试在我的 iMac (Catalina 10.15.6) 上运行 TrinotateWeb (v3.2.1)。它使用轻量级浏览器 lighttpd (v1.4.55),它是我随 Homebrew 一起安装的。
启动服务器时,它抱怨在@INC 中找不到 HTML/Template.pm:
Can't locate HTML/Template.pm in @INC (you may need to install the HTML::Template module)
(@INC contains:
/Library/Perl/5.18/darwin-thread-multi-2level
/Library/Perl/5.18
/Network/Library/Perl/5.18/darwin-thread-multi-2level
/Network/Library/Perl/5.18
/Library/Perl/Updates/5.18.4
/System/Library/Perl/5.18/darwin-thread-multi-2level
/System/Library/Perl/5.18
/System/Library/Perl/Extras/5.18/darwin-thread-multi-2level
/System/Library/Perl/Extras/5.18
.) at /Applications/Trinotate-v3.2.1/TrinotateWeb/cgi-bin/index.cgi line 15.
BEGIN failed--compilation aborted at
/Applications/Trinotate-v3.2.1/TrinotateWeb/cgi-bin/index.cgi line 15.
但是,HTML/Template.pm 很好地安装在文件夹/Users/simon/perl5/lib/perl5 中。它是使用cpan HTML::Template 安装的。
问题似乎源于@INC。
我的 .zshrc 配置文件使用 PERL5LIB 引用上述位置:
PATH="/Users/simon/perl5/bin${PATH:+:${PATH}}"; export PATH;
PERL5LIB="/Users/simon/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5L$
PERL_LOCAL_LIB_ROOT="/Users/simon/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB$
PERL_MB_OPT="--install_base \"/Users/simon/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/Users/simon/perl5"; export PERL_MM_OPT;
在终端中,@INC 包含 PERL5LIB 并因此链接 HTML/Template.pm:
➜ ~ perl -V
Summary of my perl5 (revision 5 version 18 subversion 4) configuration:
Platform:
osname=darwin, osvers=19.0, archname=darwin-thread-multi-2level
uname='darwin osx397.sd.apple.com 19.0 darwin kernel version 18.0.0: tue jul 9 11:12:08 pdt 2019; root:xnu-4903.201.2.100.7~1release_x86_64 x86_64 '
config_args='-ds -e -Dprefix=/usr -Dccflags=-g -pipe -Dldflags= -Dman3ext=3pm -Duseithreads -Duseshrplib -Dinc_version_list=none -Dcc=cc'
hint=recommended, useposix=true, d_sigaction=define
useithreads=define, usemultiplicity=define
useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
use64bitint=define, use64bitall=define, uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='cc', ccflags =' -g -pipe -fno-common -DPERL_DARWIN -fno-strict-aliasing -fstack-protector',
optimize='-Os',
cppflags='-g -pipe -fno-common -DPERL_DARWIN -fno-strict-aliasing -fstack-protector'
ccversion='', gccversion='4.2.1 Compatible Apple LLVM 11.0.3 (clang-1103.0.29.20) (-macos10.15-objc-selector-opts)', gccosandvers=''
intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries:
ld='cc', ldflags =' -fstack-protector'
libpth=/usr/lib /usr/local/lib
libs=
perllibs=
libc=, so=dylib, useshrplib=true, libperl=libperl.dylib
gnulibc_version=''
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -fstack-protector'
Characteristics of this binary (from libperl):
Compile-time options: HAS_TIMES MULTIPLICITY PERLIO_LAYERS
PERL_DONT_CREATE_GVSV
PERL_HASH_FUNC_ONE_AT_A_TIME_HARD
PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP
PERL_PRESERVE_IVUV PERL_SAWAMPERSAND USE_64_BIT_ALL
USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES
USE_LOCALE USE_LOCALE_COLLATE USE_LOCALE_CTYPE
USE_LOCALE_NUMERIC USE_PERLIO USE_PERL_ATOF
USE_REENTRANT_API
Locally applied patches:
/Library/Perl/Updates/<version> comes before system perl directories
installprivlib and installarchlib points to the Updates directory
Built under darwin
Compiled at Jun 5 2020 17:34:07
%ENV:
PERL5LIB="/Users/simon/perl5/lib/perl5"
PERL_LOCAL_LIB_ROOT="/Users/simon/perl5"
PERL_MB_OPT="--install_base "/Users/simon/perl5""
PERL_MM_OPT="INSTALL_BASE=/Users/simon/perl5"
@INC:
/Users/simon/perl5/lib/perl5/5.18.4/darwin-thread-multi-2level
/Users/simon/perl5/lib/perl5/5.18.4
/Users/simon/perl5/lib/perl5/darwin-thread-multi-2level
/Users/simon/perl5/lib/perl5
/Library/Perl/5.18/darwin-thread-multi-2level
/Library/Perl/5.18
/Network/Library/Perl/5.18/darwin-thread-multi-2level
/Network/Library/Perl/5.18
/Library/Perl/Updates/5.18.4
/System/Library/Perl/5.18/darwin-thread-multi-2level
/System/Library/Perl/5.18
/System/Library/Perl/Extras/5.18/darwin-thread-multi-2level
/System/Library/Perl/Extras/5.18
.
我不明白为什么在执行 lighttpd 时@INC 没有列出所有路径作为我上面显示的实际环境?
【问题讨论】:
-
lighttpd 是否由与 simon 不同的用户运行?也许它没有读取/Users/simon下文件的权限?
-
我不熟悉 lighttpd,但我猜它是作为一项服务运行的,永远不会触及您的
.zshrc文件?我更喜欢在我的主目录中安装整个perl(例如使用perlbrew)而不是仅安装模块(例如使用 local::lib) 的少数(但主要)原因之一 -
你所说的模块安装路径不包含在
@INC中,如报错信息所报告。因此 perl 看不到它。您选择将它安装在那里,而不是在常规的 perl 库中是有原因的吗? IE。@INC中列出的路径之一。 -
@DaveMitchell:lighttpd 在
/Users/simon下运行(另外,那台计算机上只有一个帐户),所以我认为这可能不是权限问题。 @TLP:路径确实不包括在内,但我想知道为什么会这样,因为它在perl -V返回的@INC中很好地列出了。没有特别的理由把它放在那里,只是自动使用cpan的位置(第一次在这台机器上运行cpan)。 @ikegami:感谢您的建议。我将在星期一尝试使用 brew 安装另一个 perl。 -
@sihellem 对我来说听起来像是一个用户混淆(也许 webscripts 是由不同的用户运行的),或者你正在使用两个不同版本的 perl。但这不是我的专业领域。