(Az alábbi információk csak az Anaconda telepítésekre vonatkoznak. Az alapötlet bármelyik python telepítésre érvényes, de a pontos kezelési módok eltérőek.)
Tegyük fel, hogy írsz egy Python modult, mondjuk coolscript
néven, amiben mindenféle klassz függvény van, amit te írtál. Talán elmentetted a számítógéped asztalára. Talán aztán bemész az Anaconda Navigatorba, elindítod a Spydert vagy egy másik programot az Ancondán belül, és megpróbálod importálni ezeket a függvényeket egy olyan kódsorral, mint,
from coolscript import *
De sajnos hibát kapsz:
ModuleNotFoundError: No module named 'coolscript'
Ezt sok minden okozhatja, de talán az, hogy a könyvtár, amelyben a coolscipt.py
található, nem része a PYTHONPATH
, azaz.e., fájlkönyvtárak halmazának, amelyben a Python a szükséges fájlokat keresi. Derítsük ki, hogy mi a mi PYTHONPATH
-ünk, és nézzük meg, hogy tartalmazza-e a szkriptünket. Indítsunk el egy Anaconda súgót. Ezt megtehetjük közvetlenül a Start menüből Windowsban vagy a Launcher alkalmazásból MacOS-ben, de egy másik lehetőség, hogy elindítjuk az Anaconda Navigátort és elindítunk egy terminált, mint az alábbi képernyőképen:
Most futtassa ezt a parancsot, hogy megnézze a PYTHONPATH
:
python -c "import sys; print('\n'.join(sys.path))"
Egy személyes Windows-alapú gépen, friss Anaconda3 telepítéssel a következő eredményt kapom:
Hacsak a szkriptem nincs a fenti mappák (vagy azok almappáinak) egyikében, a python nem fogja megtalálni, hacsak nem adod meg kifejezetten a teljes elérési utat, amikor pythonból hívod (vagy ha abban a könyvtárban indítod el a pythont, ahol a fájl található). Ideális esetben ezt a problémát a modulok megfelelő telepítésével szeretnénk elkerülni. Ha valaki más írta a kódmodult, akkor a legjobb, ha a conda
használatával telepítjük, vagy ha ez nem lehetséges, akkor a pip
vagy egy setup.py
fájl használatával. Ezek a legjobb gyakorlatok a saját kód esetében is.
Mindenesetre néha hasznos, ha van egy kényelmes “munkakönyvtár” az ideiglenes vagy befejezetlen kód számára, és nem biztos, hogy minden egyes alkalommal, amikor a kódot meghívjuk, a pythont ebbe a könyvtárba akarjuk navigálni. A probléma megoldásának egyik módja, hogy a PYTHONPATH
-hez hozzáadjuk a kívánt könyvtárat.
Ha ideiglenesen hozzá akarunk adni egy könyvtárat a pythonunkhoz, akkor egyszerűen futtathatjuk a következő parancsokat abban a python terminálban, amelyet a szkript futtatására használunk:
import syssys.path.append(r'/path/to/my/package')
ahol a “/path/to/my/package”-t a python szkript fájlját tartalmazó mappa fájlútjára kell cserélni. Ez a megközelítés csak addig működne, amíg be nem zárjuk a python fordító adott példányát; minden egyes alkalommal, amikor elindítunk egy python parancssort, újra el kellene indítanunk.
Ha tartósabban hozzá akarunk adni egy mappát a PYTHONPATH
könyvtárunkhoz, akkor ezt úgy tehetjük meg, hogy létrehozunk egy .pth
fájlt a site-packages
könyvtárban. A fenti képernyőképen vegyük észre a site-packages
mappát. Minden Anaconda telepítésnek rendelkeznie kell egy ilyen nevű mappával. Hozzunk létre egy új szöveges fájlt ebben a könyvtárban, és nevezzük el úgy, hogy a fájl kiterjesztése .pth
legyen (pl. egy extrapythonfolders.pth
nevű fájl is megfelel). Ebben a szöveges fájlban soronként egyenként felsorolhatja azokat a könyvtárakat, amelyeket a PYTHONPATH
-be szeretne felvenni. Egy Windows gépen például egy C:\myscripts
feliratú sort adhatok hozzá. Mentsd el a fájlt ezekkel az új helyekkel, majd próbáld meg újra futtatni a következő parancsot az Anaconda Promptben:
python -c "import sys; print('\n'.join(sys.path))"
Meglátod, hogy az új könyvtárak most már szerepelnek (lehet, hogy újra kell indítanod az Anacondát, hogy az összes szoftverben működjön). Most már képesnek kell lenned modulok importálására vagy kód futtatására ebből a könyvtárból, függetlenül attól, hogy a python hol kezdődik a fájlstruktúrádban.