(Följande information gäller endast för Anaconda-installationer. Den grundläggande idén gäller för alla pythoninstallationer, men de exakta sätten att ta itu med problemet är olika.)
Antag att du skriver en Pythonmodul som heter, säg, coolscript
som har alla möjliga coola funktioner som du har skrivit. Kanske har du sparat den på datorns skrivbord. Kanske går du sedan till Anaconda Navigator, startar Spyder eller ett annat program inom Anconda och försöker importera dessa funktioner med en kodrad som,
from coolscript import *
Men tyvärr får du ett fel:
ModuleNotFoundError: No module named 'coolscript'
Mängder av saker kan orsaka detta, men kanske beror det på att katalogen där coolscipt.py
ligger inte är en del av PYTHONPATH
, dvs.e., den uppsättning filkataloger där Python söker efter filer som den behöver. Låt oss ta reda på vad vår PYTHONPATH
är och se om den innehåller vårt skript. Starta en Anaconda Prompt. Du kanske kan göra detta direkt från Start-menyn i Windows eller appen Launcher i MacOS, men ett annat sätt att starta den är att starta Anaconda Navigator och starta en terminal som i skärmdumpen nedan:
Kör nu det här kommandot för att se din PYTHONPATH
:
python -c "import sys; print('\n'.join(sys.path))"
I mitt fall får jag följande resultat på en personlig Windows-baserad maskin med en ny Anaconda3-installation:
Om mitt skript inte finns i någon av dessa mappar (eller deras undermappar) kommer det inte att hittas av python om du inte uttryckligen anger den fullständiga sökvägen när du anropar det från python (eller om du startar python i den katalog där filen finns). Helst vill vi undvika detta problem genom att installera moduler på rätt sätt. Om det är någon annan som skrivit kodmodulen är det bästa sättet att göra det att installera den med hjälp av conda
eller, om det inte är möjligt, genom att använda pip
eller en setup.py
-fil. Detta är också de bästa metoderna för den egna koden.
Hur som helst är det ibland bra att ha en praktisk ”arbetskatalog” för tillfällig eller oavslutad kod, och du kanske inte vill navigera python till den katalogen varje gång du anropar koden. Ett sätt att lösa det här problemet är att lägga till din föredragna katalog till din PYTHONPATH
.
Om vi tillfälligt vill lägga till en katalog till vår python kan vi helt enkelt köra följande kommandon i den pythonterminal som vi använder för att köra skriptet:
import syssys.path.append(r'/path/to/my/package')
där ”/path/to/my/package” ska ändras till filsökvägen till mappen som innehåller din pythonskriptfil. Det här tillvägagångssättet skulle bara fungera tills vi stängde den instansen av pythonkompilatorn; vi skulle behöva köra om den varje gång vi startade en pythonkommandorad.
Om vi vill lägga till en mapp på ett mer permanent sätt till vår PYTHONPATH
kan vi göra det genom att skapa en .pth
-fil i katalogen site-packages
. I skärmdumpen ovan ser du mappen site-packages
. Varje Anaconda-installation bör ha en mapp med det namnet. Skapa en ny textfil i den katalogen och namnge den så att den har filändelsen .pth
(t.ex. en fil som heter extrapythonfolders.pth
skulle vara bra). I den textfilen kan du lista kataloger som du vill inkludera i din PYTHONPATH
, en per rad. På en Windows-maskin kan jag till exempel lägga till en rad som lyder C:\myscripts
. Spara filen med dessa nya platser och försök sedan igen att köra följande kommando i Anaconda Prompt:
python -c "import sys; print('\n'.join(sys.path))"
Du bör se att dina nya kataloger nu är inkluderade (du kan dock behöva starta om Anaconda för att få det att fungera i alla dess programvaror). Du bör nu kunna importera moduler eller köra kod från den katalogen, oavsett var du startar python i din filstruktur.