Få Anaconda Python til at finde dine Python-scripts – Ændring af PYTHONPATH

(De følgende oplysninger gælder kun for Anaconda-installationer. Den grundlæggende idé gælder for alle python-installationer, men de præcise måder at løse problemet på er forskellige.)

Sæt, at du skriver et Python-modul ved navn, lad os sige, coolscript, som har alle mulige fede funktioner, som du har skrevet. Måske har du gemt det på skrivebordet på din computer. Måske går du derefter til Anaconda Navigator, starter Spyder eller et andet program i Anconda og forsøger at importere disse funktioner med en kodelinje som,

from coolscript import *

Men desværre får du en fejl:

ModuleNotFoundError: No module named 'coolscript'

Masser af ting kan forårsage dette, men måske er det fordi den mappe, hvori coolscipt.py befinder sig, ikke er en del af PYTHONPATH, dvs.e., det sæt af filmapper, som Python søger efter filer, som den har brug for. Lad os finde ud af, hvad vores PYTHONPATH er, og se, om den indeholder vores script. Start en Anaconda Prompt. Du kan måske gøre dette direkte fra Start-menuen i Windows eller Launcher-appen i MacOS, men en anden måde du kan starte den på er ved at starte Anaconda Navigator og starte en terminal som i skærmbilledet nedenfor:

Kør nu denne kommando for at se din PYTHONPATH:

python -c "import sys; print('\n'.join(sys.path))"

I mit tilfælde får jeg følgende resultat på en personlig Windows-baseret maskine med en frisk Anaconda3-installation:

python -c "import sys; print('\n'.join(sys.path))"

Medmindre mit script befinder sig i en af disse mapper (eller deres undermapper), vil det ikke blive fundet af python, medmindre du udtrykkeligt angiver den komplette sti, når du kalder det fra python (eller hvis du starter python i den mappe, hvori filen befinder sig). Ideelt set ønsker vi at undgå dette problem ved at installere modulerne korrekt. Hvis det er en anden der har skrevet kodemodulet, er den bedste måde at gøre det på at installere det ved hjælp af conda eller, hvis det ikke er muligt, ved at bruge pip eller en setup.py-fil. Dette er også den bedste praksis for ens egen kode.

Det er dog nogle gange nyttigt at have en praktisk “arbejdsmappe” til midlertidig eller ufærdig kode, og man ønsker måske ikke at navigere python til den mappe hver eneste gang man kalder koden. En måde at løse dette problem på er at tilføje din foretrukne mappe til din PYTHONPATH.

Hvis vi ønsker at tilføje en mappe midlertidigt til vores python, kan vi blot køre følgende kommandoer i den python-terminal, som vi bruger til at køre scriptet:

import syssys.path.append(r'/path/to/my/package')

hvor “/path/to/my/package” skal ændres til filstien til den mappe, der indeholder din python-scriptfil. Denne fremgangsmåde ville kun fungere, indtil vi lukkede denne instans af python-kompileren; vi skulle køre den igen, hver gang vi startede en python-kommandolinje.

Hvis vi ønsker at tilføje en mappe mere permanent til vores PYTHONPATH, kan vi gøre det ved at oprette en .pth-fil i mappen site-packages. I skærmbilledet ovenfor kan du se mappen site-packages. Hver Anaconda-installation bør have en mappe med det navn. Opret en ny tekstfil i den mappe og navngiv den således, at den har filtypenavnet .pth (f.eks. ville en fil med navnet extrapythonfolders.pth være fint). I denne tekstfil kan du opregne de mapper, som du ønsker at medtage i din PYTHONPATH, én pr. linje. På en Windows-maskine kan jeg f.eks. tilføje en linje, der lyder C:\myscripts. Gem filen med disse nye placeringer, og prøv derefter igen at køre følgende kommando på Anaconda Prompt:

python -c "import sys; print('\n'.join(sys.path))"

Du burde se, at dine nye mapper nu er inkluderet (du skal dog muligvis genstarte Anaconda for at få det til at virke i alle programmer). Du bør nu kunne importere moduler eller køre kode fra denne mappe, uanset hvor du starter python i din filstruktur.

Skriv en kommentar