Anaconda Python uw Python-scripts laten vinden – Het PYTHONPATH aanpassen

(De volgende informatie is alleen van toepassing op Anaconda-installaties. Het basisidee geldt voor elke python installatie, maar de precieze manieren om het probleem aan te pakken zijn verschillend.)

Stel dat u een Python module schrijft met de naam, zeg, coolscript die allerlei coole functies bevat die u hebt geschreven. Misschien heb je die opgeslagen op het bureaublad van je computer. Misschien gaat u dan naar Anaconda Navigator, start u Spyder of een ander programma binnen Anconda, en probeert u die functies te importeren met een regel code zoals,

from coolscript import *

Maar, helaas, u krijgt een foutmelding:

ModuleNotFoundError: No module named 'coolscript'

Veel dingen kunnen dit veroorzaken, maar misschien is het omdat de directory waarin coolscipt.py staat geen deel uitmaakt van de PYTHONPATH, d.w.z.e., de set van bestandsdirectories waarin Python zoekt naar bestanden die het nodig heeft. Laten we eens kijken wat onze PYTHONPATH is en zien of het ons script bevat. Start een Anaconda Prompt. U kunt dit misschien direct doen vanuit het Start menu in Windows of de Launcher app in MacOS, maar een andere manier om het te starten is door de Anaconda Navigator te starten en een terminal te starten zoals in de schermafbeelding hieronder:

Nu, voer dit commando uit om uw PYTHONPATH te zien:

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

In mijn geval, krijg ik het volgende resultaat op een persoonlijke Windows-gebaseerde machine met een verse Anaconda3 installatie:

Tenzij mijn script zich in een van deze mappen bevindt (of in de submappen ervan), zal het niet worden gevonden door python, tenzij je expliciet het volledige pad aangeeft wanneer je het script vanuit python aanroept (of als je python start in de map waarin het bestand zich bevindt). In het ideale geval willen we dit probleem vermijden door modules correct te installeren. Als iemand anders de code-module heeft geschreven, is de beste manier om dat te doen het te installeren met conda of, als dat niet mogelijk is, door pip of een setup.py bestand te gebruiken. Dit zijn ook de beste praktijken voor de eigen code.

Maar soms is het handig om een handige “werkdirectory” te hebben voor tijdelijke of onvoltooide code, en je wilt python misschien niet naar die directory navigeren elke keer dat je de code aanroept. Een manier om dit probleem op te lossen is het toevoegen van je voorkeursdirectory aan je PYTHONPATH.

Als we tijdelijk een directory willen toevoegen aan onze python, kunnen we simpelweg de volgende commando’s uitvoeren in de python-terminal die we gebruiken om het script uit te voeren:

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

waar “/path/to/my/package” moet worden veranderd in het bestandspad naar de map die je python-scriptbestand bevat. Deze aanpak zou alleen werken totdat we die instantie van de python-compiler zouden sluiten; we zouden het elke keer opnieuw moeten uitvoeren als we een python-opdrachtregel starten.

Als we een meer permanente map willen toevoegen aan onze PYTHONPATH, kunnen we dat doen door een .pth-bestand te maken in de site-packages-directory. In de schermafbeelding hierboven, zie de site-packages map. Elke Anaconda installatie zou een map met die naam moeten hebben. Maak een nieuw tekstbestand aan in die directory, en geef het een naam met de extensie .pth (bijvoorbeeld, een bestand met de naam extrapythonfolders.pth zou ook goed zijn). In dat tekstbestand kunt u een lijst van mappen opnemen die u in uw PYTHONPATH wilt opnemen, één per regel. Op een Windows machine zou ik bijvoorbeeld een regel kunnen toevoegen die C:\myscripts luidt. Sla het bestand op met deze nieuwe locaties, en probeer dan opnieuw het volgende commando uit te voeren op de Anaconda prompt:

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

U zou moeten zien dat uw nieuwe directories nu zijn opgenomen (het kan echter zijn dat u Anaconda opnieuw moet starten om het in al zijn software te laten werken). U zou nu in staat moeten zijn om modules te importeren of code uit te voeren vanuit die directory, ongeacht waar u python start in uw bestandsstructuur.

Plaats een reactie