Hogyan kezelhető több Python verzió és virtuális környezet

Kiegészítés 2019 január: Ha visszatér a blogra a MacOS Mojave-ra történő frissítés után, kérjük, olvassa el ezt a github-kiadványt a közös pyenv 'zlib not available' probléma megoldására.

Mielőtt elkezdenénk, nézzük át röviden a címben használt kifejezéseket:

  • Több Python verzió : A Python különböző telepítései ugyanazon a gépen, például 2.7 és 3.4.
  • Virtuális környezetek : elszigetelt, független környezetek, amelyekbe a Python és a projektspecifikus csomagok egy adott verziója egyaránt telepíthető, anélkül, hogy bármilyen más projektet érintene.

Itt három különböző eszközt fogunk megvizsgálni az ezekkel való együttműködéshez, és amikor szükség lehet rájuk. Fedezzük fel a következő esetek felhasználási eseteit:

  • venv / pyvenv
  • pyenv
  • pyenv-virtualenv

Ha a Python egyetlen verzióját használja , mondjuk a 3.3+ verziót , és különféle virtuális környezeteket szeretne kezelni , akkor venvmindenre szüksége van.

Ha a Python több , 3.3+ verzióját szeretné használni , virtuális környezettel vagy anélkül , folytassa a tovább olvasást pyenv.

Ha Ön is szeretne dolgozni a Python 2-vel , akkor pyenv-virtualenvez egy megfontolandó eszköz.

venv

A Python 3.3+ verziótól a venvcsomag benne van. Ideális könnyű virtuális környezetek létrehozásához.

A Python 3.6-ig egy úgynevezett szkriptet pyvenvis mellékeltek, mint burkolót venv, de ezt már nem használták. A Python 3.8-ban teljesen eltávolítja. Pontosan ugyanaz a funkció érhető el a használat során venv, és a meglévő dokumentációt frissíteni kell. Bárki érdeklődő elolvashatja a leértékelődés okait pyvenv.

venv a terminál paranccsal új környezet létrehozására szolgál:

$ python3 -m venv directory-name-to-create

aktiválva:

$ source name-given/bin/activate

és deaktiválva egyszerűen:

$ deactivate

Ha deaktiválása után teljesen el kell távolítania a környezetet, akkor futtathatja:

$ rm -r name-given

Alapértelmezés szerint az általa létrehozott környezet az Ön által használt Python aktuális verziója lesz. Ha dokumentációt ír, és azt szeretné, hogy az olvasó a Python helyes verzióját használja, megadhatja a fő és a kisebb verziószámot a parancsban, például:

$ python3.6 -m venv example-three-six

Ha az olvasó nem a 3.6-os verziót használja, akkor a parancs nem lesz sikeres, és hibaüzenetében jelzi. Bármelyik javító verzió (például 3.6.4) működni fog.

Amikor a környezet aktív, bármilyen csomag telepíthető rá pipa szokásos módon. Alapértelmezés szerint az újonnan létrehozott környezet nem tartalmaz olyan csomagokat, amelyek már telepítve vannak a gépre. Mivel pipönmagában nem feltétlenül lesz telepítve a gépre. Javasoljuk, hogy először frissíteni pipa legújabb verzióra, a pip install --upgrade pip.

A projektek általában rendelkeznek egy requirements.txtfájllal, amely meghatározza annak függőségeit. Ez lehetővé teszi a parancsikon parancs számára pip install -r requirements.txtaz összes csomag gyors telepítését az újonnan létrehozott virtuális környezetbe. Csak a virtuális környezetben léteznek. Deaktiválva nem lesz elérhető, de újra aktiválva marad.

Ha nincs szüksége a Python további verzióinak használatára, akkor csak erre van szükség elszigetelt, projekt-specifikus, virtuális környezetek létrehozásához.

pyenv

Ha a Python több verzióját szeretné használni egyetlen gépen, akkor pyenvez egy általánosan használt eszköz a verziók telepítéséhez és váltásához. Ez nem tévesztendő össze a korábban említett leértékelt pyvenvszkriptel. Nem tartozik a Python csomagjába, és külön kell telepíteni.

A pyenvdokumentáció nagyszerű leírást tartalmaz a működéséről, ezért itt egyszerűen megnézzük, hogyan kell használni.

Először telepítenünk kell. Ha Mac OS X-et használ, ezt megtehetjük a Homebrew használatával, más esetben vegye figyelembe a többi telepítési lehetőséget.

$ brew update $ brew install pyenv

Ezután adja hozzá a következőket a shell parancsfájlok alja felé, hogy lehetővé tegye pyenva verziók automatikus módosítását az Ön számára:

eval "$(pyenv init -)"

Ehhez nyissa meg a használatban lévő shell parancsfájlt a via vagy segítségével $ ~/.zshrc, és másolja és illessze be a fenti sort.$ ~/.bashrc$ ~/.bash_profile

A futás pyenv versionsmegmutatja, hogy mely Python verziók vannak jelenleg telepítve, a *jelenleg használtak mellett. pyenv versionezt közvetlenül mutatja, és python --versionfelhasználható ennek ellenőrzésére.

További verzió telepítéséhez mondjuk 3.4.0egyszerűen használja pyenv install 3.4.0.

pyenv négy helyen keresi a Python melyik verziójának használatát, elsőbbségi sorrendben:

  1. A PYENV_VERSIONkörnyezeti változó (ha meg van adva). A pyenv shellparanccsal beállíthatja ezt a környezeti változót az aktuális shell munkamenetben.
  2. Az alkalmazás-specifikus .python-versionfájl az aktuális könyvtárban (ha van). A paranccsal módosíthatja az aktuális könyvtár .python-versionfájlját pyenv local.
  3. Az első .python-versionmegtalált fájl (ha van ilyen) az egyes szülőkönyvtárakban keresve, amíg el nem éri a fájlrendszer gyökerét.
  4. A globális verziófájl. Ezt a fájlt a pyenv globalparanccsal módosíthatja . Ha a globális verziófájl nincs, a pyenv feltételezi, hogy a "rendszer" Pythont szeretné használni. (Más szavakkal, bármilyen verzió is futna, ha a pyenv nem szerepelne a tiédben PATH.)

Amikor egy új projektet állítanak be, amely a Python 3.6.4 verziót használja, akkor pyenv local 3.6.4a gyökérkönyvtárban fut. Ez egyszerre állítja be a verziót, és létrehoz egy .python-versionfájlt, hogy más közreműködők gépei vegyék fel.

A pyenvparancsok teljes leírása a könyvjelzők közé tartozik.

pyenv és venv

A Python 3.3+ alkalmazással most már tudjuk, hogyan kell telepíteni és váltani a Python különböző verzióit, valamint hogyan lehet új virtuális környezeteket létrehozni.

Példaként tegyük fel, hogy egy olyan projektet hoztunk létre, amelynek a Python 3.4-et kellett használnia.

Először a pyenv local 3.4.0.

Ha ezután futtatnánk, python3 -m venv example-projectegy új virtuális környezetet állítanánk be example-projecta helyileg engedélyezett Python 3.4.0 használatával.

Aktiváljuk a használatát source example-project/bin/activateés elkezdhetjük a munkát.

Ezután opcionálisan dokumentálhatjuk, amelyet egy munkatársnak használnia kell python3.4 -m venv . Ez azt jelenti, hogy akkor is, ha egy együttműködő nem használta a pyenv-t, a python3.4parancs hibát vétene, ha a Python-verziójuk nem ugyanaz a fő- és mellékverziója (3. és 4.), ahogyan szándékoztuk.

Alternatív megoldásként választhatjuk, hogy egyszerűen megadjuk, hogy a 3.4.0-at kell használni, és utasíthatunk python3 -m venv . Ha úgy gondoljuk, hogy minden ve rsion g reater mint 3,4 elfogadható, akkor mi is úgy dönt, hogy használja python3felett python3.4, mintha a közreműködő volt használva 3,6 akkor egyébként is hibaüzenetet kap. Ez egy projektspecifikus döntés.

pyenv-virtualenv

pyenvhasználható mind a Python 2, mind a 3 verzió telepítésére. Amint azonban láttuk, venva Python 3.3-nál nagyobb verzióira korlátozódik.

pyenv-virtualenvegy olyan eszköz a virtuális környezetek létrehozásához, amelyek integrálva vannak pyenva Python összes verziójához, és minden olyan verzióhoz használhatók. Továbbra is javasoljuk a hivatalos Python használatát, venvahol lehetséges. De ha például ezek alapján hoz létre virtuális környezetet 2.7.13, akkor ez bókol pyenv.

Az Anaconda és a Miniconda condakörnyezetekkel is jól működik, ha ezeket már használja. Az úgynevezett eszköz virtualenvis létezik. Itt nem szerepel, de a végén összekapcsolódik.

A telepítés után a pyenvkövetkező telepíthető a Homebrew (vagy alternatívák) használatával:

$ brew install pyenv-virtualenv

Ezután a .zshrc( .bashrc, vagy .bash_profile(attól függően, hogy melyik héjat használja) adja hozzá a következőt az alja felé:

eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"

Ez lehetővé teszi pyenva környezetek automatikus aktiválását és deaktiválását könyvtárak áthelyezésekor.

Új virtuális környezet létrehozásához használja:

$ pyenv virtualenv   // for example $ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10

A meglévő környezetek felsorolhatók:

$ pyenv virtualenvs

Aktiválva / deaktiválva:

$ pyenv activate  $ pyenv deactivate

Írás közben activatea figyelmeztetés prompt changing will be removed from future releasemegjelenik a használatakor. Ez várhatóan csak (env-name)a héjban való megjelenésre vonatkozik, nem pedig activatemaga a parancs használatára .

A telepítési követelmények az alábbiak szerint működnek venv. Ellentétben venva rm -rparancs nem szükséges eltávolítani környezetben, egy uninstallparancs létezik.

Végső gondolatok

E három eszköz között képesek vagyunk együttműködni bármilyen projektben, függetlenül a Python verziójától vagy a szükséges függőségektől. Azt is tudjuk, hogyan kell dokumentálni a többi felhasználó számára beállított használati utasítást bármilyen projekten, amelyen dolgozunk.

Láthatjuk az indoklást is, melyik készletet kell használni, mivel nem minden fejlesztőnek lesz szüksége mindháromra.

Remélhetőleg ez hasznos volt, és hasznos referencia az alábbiakban hivatkozott dokumentációval együtt.

Köszönöm, hogy elolvasta! ?

Egyéb dolgok, amelyeket felfedeztem:

  • ES és CommonJS modulok gúnyolása a jest.mock () használatával
  • Kezdő útmutató az Amazon Elastic Container Service szolgáltatásához

Erőforrások

  • Python virtuális környezetek: A Primer
  • Amortizáló pyvenv
  • Python venvdokumentáció
  • venv vs. virtualenv
  • Mi a különbség a venv, a pyvenv, a pyenv, a virtualenv, a virtualenvwrapper, a pipenv stb. Között?
  • Telepítenem kell pip?