【问题标题】:Regarding Perl DBD::Oracle installation in local directory关于在本地目录中安装 Perl DBD::Oracle
【发布时间】:2012-10-02 00:02:52
【问题描述】:
  1. 我想从 solaris 服务器中的 perl 脚本连接到 oracle 数据库。在当前的 perl 版本 5.8.4 中可以看到 DBI 已安装但未安装 DBD::Oracle。我没有 root 访问权限,也没有使用我的家庭用户 ID。下载 DBD-Oracle-1.50 并在我的 perl 脚本所在的本地目录中解压缩。我想将 DBD Oracle 库文件复制到自定义目录并运行脚本,因为我没有 root 访问权限。当我阅读 DBD-Oracle-1.50 中的安装脚本时,它说手动安装我需要运行以下脚本。由于我没有 root 访问权限,因此我想将库模块复制到本地目录中。不知道如何告诉这些脚本将其安装在我的 perl 脚本所在的本地目录中。

  2. 在我的用户 ID 下的自定义目录中安装 DBI 和 DBD 是否使其正常工作。这些模块是否需要 root 访问权限才能正常工作?要使用 DBD::Oracle 需要在服务器中安装 oracle。我对 Oracle 驱动程序 DBD::Oracle 的理解应该会照顾它。

 perl Makefile.PL
 make && make test
 make install 

>  ls -tlr /usr/perl5/vendor_perl/5.8.4/sun4-solaris-64int total 956
> -rwxr-xr-x   1 root     bin        15161 Mar 26  2005 Roadmap.pod
> -rwxr-xr-x   1 root     bin         1048 Sep  5  2006 TASKS.pod
> -rwxr-xr-x   1 root     bin       289343 Jun 26  2007 DBI.pm
> -rwxr-xr-x   1 root     bin         4608 Jun 12  2008 goferperf.pl
> -rwxr-xr-x   1 root     bin         1356 Jun 12  2008 dbixs_rev.pl
> -rwxr-xr-x   1 root     bin        58386 Apr  3  2010 SNMP.pm drwxr-xr-x   3 root     bin            7 Oct 13  2010 NetSNMP
> drwxr-xr-x   2 root     bin            3 Oct 13  2010 Win32 drwxr-xr-x
> 8 root     bin           19 Oct 13  2010 DBI drwxr-xr-x   2 root    
> bin            4 Oct 13  2010 Bundle drwxr-xr-x   6 root     other    
> 6 Oct 13  2010 auto drwxr-xr-x   3 root     bin           11 Oct 13 
> 2010 DBD
> 
> ls -ltr  /usr/perl5/vendor_perl/5.8.4/sun4-solaris-64int/DBD total 543
> -rwxr-xr-x   1 root     bin       111586 May  6  2006 Pg.pm
> -rwxr-xr-x   1 root     bin        28785 Sep 27  2006 Proxy.pm
> -rwxr-xr-x   1 root     bin         7937 Jan 25  2007 Sponge.pm
> -rwxr-xr-x   1 root     bin        42836 Feb  6  2007 DBM.pm
> -rwxr-xr-x   1 root     bin        19882 Mar 28  2007 File.pm
> -rwxr-xr-x   1 root     bin        12051 May 10  2007 ExampleP.pm
> -rwxr-xr-x   1 root     bin        43586 May 14  2007 Gofer.pm
> -rwxr-xr-x   1 root     bin         3761 Jun 15  2007 NullP.pm drwxr-xr-x   4 root     bin            4 Oct 13  2010 Gofer

【问题讨论】:

  • 谁能帮我解决这个问题
  • 一个类似的问题已经回答here
  • 非常感谢您提供的信息。在我的用户 ID 下的自定义目录中安装 DBI 和 DBD 是否使其正常工作。这些模块是否需要 root 访问权限才能正常工作?要使用 DBD::Oracle 需要在服务器中安装 oracle。我对 Oracle 驱动程序 DBD::Oracle 的理解应该照顾它。
  • 你可以将它安装在你的主目录中,但你只需要让 perl 知道它是通过 PERL5LIB env var 或程序中的“使用 lib”语句安装的。

标签: perl mod-perl


【解决方案1】:

如果已经安装了 DBI,您应该只需要安装 DBD::Oracle,尽管您可能想要安装更高版本的 DBI。您可以在主目录下安装 DBD::Oracle,然后将 PERL5LIB 环境变量设置为该目录(或包含该目录)。漫长的安装方式是:

perl Makefile.PL PREFIX=~/perl #Or whatever sub-directory you like
make
make test
make install

然后在运行程序之前在 PERL5LIB 中至少包含“~/perl/lib;~/perl/lib/site_perl”(或在程序中包含“使用库”)。

您还可以设置某些环境变量,例如 PERL_MM_OPT 和 PERL_MB_OPT,这样您就不必在命令行上指定 PREFIX=(请参阅 ExtUtils::MakeMaker 和 Module::Build 的文档)。我还推荐 cpanm 并将 PERL_CPANM_HOME 设置为您的主目录下的内容。

【讨论】:

  • 非常感谢您提供的信息。将对其进行测试并回复您
【解决方案2】:

Perl 模块可以很好地安装在自定义目录中。当您没有root 访问权限来安装PM 时,通常会出现这种情况。在自定义文件夹中安装 DBIDBD 后,有几种不同的方法可以确保 perl 知道此安装。

1.设置环境变量PERL5LIB

Perl 会先在 PERL5LIB 环境变量中指定的目录中查找模块,然后再查找标准库和当前目录,因此您可以设置此变量来定位您的模块。

语法与您用于 PATH 环境变量的语法相同,因此您在 unix 上用冒号分隔目录,在 Windows 上用分号分隔目录。

例子:

# unix, bourne shell
PERL5LIB=/home/path/lib:/usr/another/path/lib; export PERL5LIB

请注意,使用 -T 选项(污点检查)运行的脚本不使用该变量,因此在这些情况下,此选项将不起作用。

2。使用'-I'命令行参数

语法应该是这样的:

perl -I /home/path/lib -I /usr/another/lib script.pl

3.在脚本中添加库路径

在脚本中包含路径的命令是:使用 lib "path"。 请注意,此语句在 @INC 数组前面加上“path”,因此它与 unshift @INC, "path" 基本相同

Example:

#!/usr/bin/perl
use lib "/home/path/lib";
use lib "/usr/another/lib";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    相关资源
    最近更新 更多