Making Anaconda Python Find Your Python Scripts – Modifying the PYTHONPATH

(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.

Szólj hozzá!