Lyra: Wie Modulbibliothek einbinden?

Hallo,
auf meinem Apache unter Vista bekomme ich die Meldung:

Can't locate xxxx.pm in @inc (@inc contains: C:/xampp/perl.....)

Wie bekomme ich meine Modul-Bibliothek in dieses @inc?
Sicherlich ist da etwas in den conf-Dateien einzustellen?

  1. Du kriegst ja gesagt was in den inc-Pfaden alles steht, also wo überall gesucht wird.
    Leg deine Datei da irgendwo rein.

    1. Du kriegst ja gesagt was in den inc-Pfaden alles steht, also wo überall gesucht wird.
      Leg deine Datei da irgendwo rein.

      Ja, das könnte ich mit push machen in dem Perl-Programm, dann müsste ich es aber in zahlreichen Programmen machen.
      Ich möchte aber, dass es schon standardmäßig im Pfad enthalten ist.
      Irgendwo müssen doch auch die anderen Angaben definiert sein. Nur diese Stelle finde ich nicht in den Perl-Conf-Dateien.

      1. Ja, das könnte ich mit push machen in dem Perl-Programm, dann müsste ich es aber in zahlreichen Programmen machen.

        Es reicht, wenn du eine Datei z.b. mylib.pm in der die Pfade in @INC eingetragen wird, einbindest. Es ist aber auch nicht sonderlich sinnvoll Module kreuz und quer zu verteilen.

        Ich möchte aber, dass es schon standardmäßig im Pfad enthalten ist.
        Irgendwo müssen doch auch die anderen Angaben definiert sein. Nur diese Stelle finde ich nicht in den Perl-Conf-Dateien.

        Dann müßtest du Perl neu übersetzten, @INC ist ein wert der fest einkompiliert ist, kann also nicht mehr nachträglich geändert werden.

        Die Perlversion von XAMPP ist, soweit ich das mitbekommen habe, auch nicht sonderlich brauchbar. Besser wäre ActivePerl oder Strawberry Perl.

        Struppi.

        1. Hi,

          Irgendwo müssen doch auch die anderen Angaben definiert sein. Nur diese Stelle finde ich nicht in den Perl-Conf-Dateien.

          Dann müßtest du Perl neu übersetzten, @INC ist ein wert der fest einkompiliert ist, kann also nicht mehr nachträglich geändert werden.

          Nö. Der ist nicht fest einkompiliert - denn Perl kann auch auf compilerfreien Windows-Systemen installiert werden.

          Und @INC kann auch über die Kommandozeile geändert werden mit -I

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
          1. Hi Ihr,
            danke bis hierher

            Und @INC kann auch über die Kommandozeile geändert werden mit -I

            Könntest Du mir dies bitte näher erläutern. ?? Kommando ???? -i.
            Irgendwo meine ich mal etwas von perl5lib in der Registry gelesen zu haben.
            Hängt dies damit zusammen?

            1. Und @INC kann auch über die Kommandozeile geändert werden mit -I
              Könntest Du mir dies bitte näher erläutern. ?? Kommando ???? -i.
              Irgendwo meine ich mal etwas von perl5lib in der Registry gelesen zu haben.
              Hängt dies damit zusammen?

              jein. Die Umgebungsvariabel kannst du auch ändern. Das wirkt aber dann nur auf deinem System und hilft dir dann natürlich nicht, wenn du deine Skripte auf einem Server packst.

              Dier Kommandozeile hilft dir vermutlich nicht viel, aber du kannst es probieren, wenn du die shebang Zeile in deinem Skript um diesen Parameter erweiterst, ist aber letztlich nicht einfacher, als use lib

              Struppi.

              1. Hallo und
                Autsch!
                Ich kann also meinen lokalen Apache Server nicht so konfigurieren, dass ich die dort getesteten Programme unverändert in s Internet übernehme?

                1. Tach auch.

                  Ich kann also meinen lokalen Apache Server nicht so konfigurieren, dass ich die dort getesteten Programme unverändert in s Internet übernehme?

                  Wenn ich mich nicht irre, dann kannst du im Apache die Umgebungsvariable PERL5LIB setzen, welches @INC beeinflussen sollte.

                  Bis die Tage,
                  Matti

                  1. Hi

                    Wenn ich mich nicht irre, dann kannst du im Apache die Umgebungsvariable PERL5LIB setzen, welches @INC beeinflussen sollte.

                    Ja, das ist mir auch in Erinnerung - aber wie?

                    1. Tach auch.

                      Wenn ich mich nicht irre, dann kannst du im Apache die Umgebungsvariable PERL5LIB setzen, welches @INC beeinflussen sollte.
                      Ja, das ist mir auch in Erinnerung - aber wie?

                      Hilft dir vielleicht die DirektiveSetEnv?

                      Bis die Tage,
                      Matti

                      1. Hi,

                        Hilft dir vielleicht die DirektiveSetEnv?

                        sieht vielversprechend aus.
                        Habe in Apache/conf/extra die Datei "httpd-xampp.conf gefunden.
                        Dort stand
                        <IfModule env_module>
                          SetEnv ....
                          ....
                          UnsetEnv PERL5LIB
                        </IfModule

                        Statt   UnsetEnv PERL5LIB
                        habe ich meine Modulbibliothek angegeben
                          SetEnv PERL5LIB "d:\mymodlib"
                        Aber leider trotzdem der gleiche Fehler @INC enthält die lib nicht.

                        1. Tach auch.

                          Hilft dir vielleicht die DirektiveSetEnv?

                          sieht vielversprechend aus.
                          Habe in Apache/conf/extra die Datei "httpd-xampp.conf gefunden.
                          Dort stand
                          <IfModule env_module>
                            SetEnv ....
                            ....
                            UnsetEnv PERL5LIB
                          </IfModule

                          Statt   UnsetEnv PERL5LIB
                          habe ich meine Modulbibliothek angegeben
                            SetEnv PERL5LIB "d:\mymodlib"
                          Aber leider trotzdem der gleiche Fehler @INC enthält die lib nicht.

                          Wird mod_env geladen? Weil ansonsten werden die oben angegebenen Zeilen "ignoriert".

                          Bis die Tage,
                          Matti

                          1. Wird mod_env geladen? Weil ansonsten werden die oben angegebenen Zeilen "ignoriert".

                            Ich nehme es an, den in conf/httpd.conf steht (nicht auskommentiert)
                            LOADMODULE Setenvif_Module modules/mod_setenvif.so
                            So long

                            1. Tach auch.

                              Wird mod_env geladen? Weil ansonsten werden die oben angegebenen Zeilen "ignoriert".

                              Ich nehme es an, den in conf/httpd.conf steht (nicht auskommentiert)
                              LOADMODULE Setenvif_Module modules/mod_setenvif.so

                              Ich habe derzeit kein Windows zur Hand, aber beim mir vorliegenden Apache ist das mod_env Modul nicht das gleiche wie das mod_setenvif Modul.
                              Such mal eine Zeile, welche das "env_module" aus "mod_env.*" lädt.

                              Bei mir sieht das so aus:
                              LoadModule env_module libexec/apache2/mod_env.so

                              Bis die Tage,
                              Matti

                              1. Such mal eine Zeile, welche das "env_module" aus "mod_env.*" lädt.

                                Bei mir sieht das so aus:
                                LoadModule env_module libexec/apache2/mod_env.so

                                Bei mir (in httpd.conf):
                                LoadModule env_module modules/mod_env.so

                                1. Tach auch.

                                  Bei mir (in httpd.conf):
                                  LoadModule env_module modules/mod_env.so

                                  So, ich habe bei mir das alles durchprobiert, bei mir gehts, allerdings habe ich kein XAMPP, sondern nutze die Mac-Alternativen.

                                  in httpd.conf:
                                    SetEnv PERL5LIB "/Users/matti/perl"

                                    
                                    use Data::Dumper;  
                                    print Dumper(\@INC);  
                                  
                                  

                                  gibt mir ~~~perl

                                  $VAR1 = [
                                            '/Users/matti/perl',
                                            [...]
                                          ];

                                    
                                  Mal ne doofe Frage (du glaubst nicht, wie häufig das vergessen wird):  
                                  du hast den Apache nach deiner Konfigurationsänderung neu gestartet?  
                                    
                                  Bis die Tage,  
                                  Matti
                                  
                                  -- 
                                  [Webapplikationen in C++ entwickeln](http://tntnet.org/)
                                  
                                  1. Mal ne doofe Frage (du glaubst nicht, wie häufig das vergessen wird):
                                    du hast den Apache nach deiner Konfigurationsänderung neu gestartet?

                                    Es gibt keine doofen Fragen - nur doofe Antworten.
                                    Die Frage ist berechtigt.
                                    Aber ich habe Apache neu gestartet und nachdem dies nicht funktionierte habe ich sogar den Rechner neu gestartet.
                                    Hast Du auch Vista?
                                    Ich vermute fast, dass es an Vista liegt.
                                    In Windows XP hat es nämlich funktioniert - aber damals sahen die Conf-Dateien ganz anders aus.

                                    1. Tach auch.

                                      In Windows XP hat es nämlich funktioniert - aber damals sahen die Conf-Dateien ganz anders aus.

                                      Langsam tue ich mir schwer mir auszudenken, was da schief laufen könnte. Versuch mal, die Konfigurationen direkt in der httpd.conf einzutragen. Es könnte sein, dass die Datei, die du editierst, gar nicht eingebunden wird (oder schau in der httpd.conf nach, ob die Datei eingebunden wird).

                                      Wenn ich mich an die XP-Version von xampp erinnere, dann sind da einige Dateien "vorbereitet", welche dann aber nich eingebunden werden müssen.

                                      Bis die Tage,
                                      Matti

                                      1. Langsam tue ich mir schwer mir auszudenken, was da schief laufen könnte. Versuch mal, die Konfigurationen direkt in der httpd.conf einzutragen. Es könnte sein, dass die Datei, die du editierst, gar nicht eingebunden wird (oder schau in der httpd.conf nach, ob die Datei eingebunden wird).

                                        Vielen Dank erstmal - ich brauche eine Auszeit - mein Kopf raucht durch die zahllosen Versuche.
                                        Werde morgen weitermachen - vielleicht kannst Du diesen Thread im Auge behalten?

                                      2. Hi,
                                        da bin ich wieder.

                                        Versuch mal, die Konfigurationen direkt in der httpd.conf einzutragen.

                                        Habe eingetragen SETENV PERL5LIB "D:/....".
                                        Hat auch nichts verändert

                                        Es könnte sein, dass die Datei, die du editierst, gar nicht eingebunden wird (oder schau in der httpd.conf nach, ob die Datei eingebunden wird).

                                        Sie wird eingebunden (Fehler, wenn ich sie umbenenne)

                                        Wenn ich mich an die XP-Version von xampp erinnere, dann sind da einige Dateien "vorbereitet", welche dann aber nich eingebunden werden müssen.

                                        JA , wäre ich nur bei XP geblieben!

                                        1. Tach auch.

                                          Versuch mal, die Konfigurationen direkt in der httpd.conf einzutragen.
                                          Habe eingetragen SETENV PERL5LIB "D:/....".
                                          Hat auch nichts verändert

                                          Könntest du mal bitte genau das posten, was du nun eingestellt hast?
                                          Ich habe es nun auf einem Linux nochmal probiert, und bei mir geht es.

                                          SetEnv PERL5LIB "/home/matti/perl"

                                          Wie prüfst du, ob es funktioniert? Ich setze folgende Zeilen ein:

                                          #!/usr/bin/perl -w  
                                          use strict;  
                                          use CGI;  
                                          use Data::Dumper;  
                                          print CGI::header(-type=> 'text/plain');  
                                          print Dumper(\@INC);  
                                          
                                          

                                          Has

                                          Bis die Tage,
                                          Matti

                                          1. Hi

                                            Könntest du mal bitte genau das posten, was du nun eingestellt hast?
                                            Ich habe es nun auf einem Linux nochmal probiert, und bei mir geht es.

                                            SetEnv PERL5LIB "/home/matti/perl"

                                            SetEnv PERL5LIB "d:/homepages/lib1"

                                            Wie prüfst du, ob es funktioniert?

                                            Ich sehe es an der Fehlermeldung, wo er sagt, dass er das Modul nicht gefunden hat und er zeigt die @inc an, die meine lib nicht enthält.
                                            Es liegt offensichtlich an der Windows VISTA - Installation, denn in XP hatte ich ja auch keine Probleme.

          2. Irgendwo müssen doch auch die anderen Angaben definiert sein. Nur diese Stelle finde ich nicht in den Perl-Conf-Dateien.

            Dann müßtest du Perl neu übersetzten, @INC ist ein wert der fest einkompiliert ist, kann also nicht mehr nachträglich geändert werden.

            Nö. Der ist nicht fest einkompiliert - denn Perl kann auch auf compilerfreien Windows-Systemen installiert werden.

            Dort ist Perl schon kompiliert, mit den festen Angaben von @INC

            Und @INC kann auch über die Kommandozeile geändert werden mit -I

            Das geht aber hier nicht, da Perl in diesem Fall nicht über die Kommandozeile aufgerufen wird und ob hier die shebang zeile ausgewertet wird, weiß nicht.

            weitere Informationen http://stackoverflow.com/questions/2526804/how-is-perls-inc-constructed-aka-what-are-all-the-ways-of-affecting-where-per

            Struppi.

            1. Hi,

              Dort ist Perl schon kompiliert, mit den festen Angaben von @INC

              Wirklich?
              Dann müßten da aber Hellseher am Werk sein, denn @INC enthält in den Pfaden den Ort der Perl-Installation (c:/programme/Perl/site/lib; c:/programme/Perl/lib auf der einen Kiste, c:/perl5.10/site/lib; c:/perl5.10/lib auf einer anderen).
              Wie soll das schon einkompiliert sein, wenn das erst beim Installationsvorgang festgelegt wird?

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              O o ostern ...
              Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
              1. Wie soll das schon einkompiliert sein, wenn das erst beim Installationsvorgang festgelegt wird?

                Es ist sowohl als auch.

                http://stackoverflow.com/questions/2526804/how-is-perls-inc-constructed-aka-what-are-all-the-ways-of-affecting-where-per

                @INC setzt sich zusammen aus:

                1. Perl interpreter is compiled with a specific default value of @INC that it was compiled with. To find out this value, run perl -V command and in the out you will see something like this:
                ..

                2. Environmental variable PERL5LIB (or PERLLIB)

                3. -I command line parameter

                4. Pass it via the use lib pragma

                (5. ist im Prinzip nur der direkte Weg von 4.)

                Struppi.

                1. Hallo!
                  In dem verlinkten Dokument

                  http://stackoverflow.com/questions/2526804/how-is-perls-inc-constructed-aka-what-are-all-the-ways-of-affecting-where-per

                  steht eigentlich die von mir gewünschte Lösung:

                  »»»» Environmental variable PERL5LIB (or PERLLIB)
                  »»»» Perl pre-pends @INC with a list of directories (colon-separated) contained in PERL5LIB (if it is not defined, PERLLIB is used)
                  »»»» environmental variable of your shell.

                  Nur wie/wo weise ich der PERL5LIB einen Wert zu, so dass das korrigierte @INC nach dem Start von Apache zur Verfügung steht (WIN Vista)?
                  Gruß
                  Lyra

              2. Nicht hellsehen, die Perl-Binary und andere Dateien werden während der Installation massiert.

                relocatable perl

                http://use.perl.org/article.pl?sid=08/01/07/1923242