Recent Changes - Search:

Oktatás

* Programozás 1
  + feladatsor
  + GitHub oldal

* Szkriptnyelvek
  + feladatsor
  + quick link

Teaching

* Programming 1 (BI)
  ◇ exercises
  ◇ quick link

* Scripting Languages
  ◇ exercises
  ◇ quick link

teaching assets


Félévek

* aktuális (2023/24/2)
* archívum


Linkek

* kalendárium
   - munkaszüneti napok '20
* tételsorok
* jegyzetek
* szakdolgozat / PhD
* ösztöndíjak
* certificates
* C lang.
* C++
* C#
* Clojure
* D lang.
* Java
* Nim
* Scala


[ edit | logout ]
[ sandbox | passwd ]

Py3 /

Virtualenv

Virtuális környezet használata Python 3.5+ -ben

A virtualenv csomag segítségével egy lokális, ún. "virtuális környezetet" tudunk kialakítani. Mire is jó ez?

Ha harmadik fél által készített Python csomagot telepítünk fel a "sudo pip3 install <csomag>" paranccsal, akkor a csomag "globális" helyre fog települni. Python 3.5 esetében általában az alábbi könyvtárba:

/usr/local/lib/python3.5/dist-packages

Ehhez egyrészt adminisztrátori jogok kellenek, ami saját gép esetében nem probléma, de máshol ez gondot jelenthet (pl. egy szerveren, ahol nincs root jogosultságunk).

A globális helyre való telepítés további gondokat is okozhat. Tegyük fel, hogy egy projektünk az XY csomag 1.0-s verzióját használja. Kijön az XY csomag 2.0-s verziója, ami viszont visszafelé nem komptaibilis az 1.0-s verzióval. Ha a rendszeren frissítjük az XY csomagot, akkor a projektünk nem fog helyesen működni, mindenféle hibaüzenettel le fog állni. Mi a megoldás? Kialakítunk egy virtuális környezetet, amiben a projektünk az XY csomag 1.0-s verzióját használja. Amikor kijön az XY 2.0, akkor ezt egy új virtuális környezetbe telepítjük fel, ahol le tudjuk tesztelni a projektünkkel. Ha nem megy, abból sincs katasztrófa. Mivel a virtuális környezetek egymástól el vannak szeparálva, ezért az első környezetben gyönyörűen tudjuk használni a projektünket az XY 1.0-val.

Telepítés

A virtuális környezetek használatához elsőször is telepítsük fel a virtualenv csomagot:

$ sudo pip3 install virtualenv -U

Ha már fent volt a csomag, akkor a -U hatására frissülni fog a legújabb verzióra (update). Ha nincs pip3 parancs, akkor menjünk le az oldal aljára, ahol mellékeltem egy részletesebb telepítési útmutatót.

Tegyük fel, hogy a requests modult szeretnénk használni weboldalak letöltésére.

#!/usr/bin/env python3

import requests

def main():
    url = "http://index.hu"
    r = requests.get(url)
    print(r.text)

##############################################################

if __name__ == "__main__":
    main()

A fenti szkript az index.hu kezdőoldalának a HTML forrását írja ki a képernyőre.

Nézzük meg, hogy fent van-e a requests modul:

$ python3
Python 3.5.2 (default, Sep 10 2016, 08:21:44)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named requests
>>>

Nincs fent. De nem esünk kétségbe, hiszen van virtualenv :) Ennek használata:

  • Hozzunk létre a HOME könyvtárunkban egy "python" nevű alkönyvtárat s lépjünk be. Az aktuális könyvtár tehát a HOME/python legyen.
  • Itt adjuk ki a következő parancsot: "virtualenv -p python3 venv". Ez létrehoz egy venv nevű alkönyvtárat, s ebben lesz a virtuális környezetünk.
  • A "which python3" paranccsal nézzük meg, hogy hol van a Python interpreter: /usr/bin/python3 .
  • Aktiváljuk a virtuális környezetet: ". venv/bin/activate". Igen, az ott egy pont. A "." helyett a "source" parancsot is használhatjuk. Vegyük észre, hogy megváltozott a prompt, immár a virt. környezet nevét is tartalmazza.
  • Megint futtassuk le a "which python3" parancsot. Hoppá! Ez már a virt. környezetünkben lévő lokális Python interpreterre mutat! Ugyanitt lesz egy "pip" parancs is, ami a Python saját csomagkezelője. És most jön a trükk: ha most kiadjuk a "pip" parancsot, akkor a virt. környezetben lévő "pip" fog lefutni és a virt. környezetbe fog telepíteni!
  • Rakjuk fel a requests csomagot: "pip install requests". Vegyük észre, hogy nem "sudo"-val hívtuk meg. Indítsuk el a python interpretert és próbáljuk most importálni a requests csomagot:
[venv] ~/python$ $ python3
Python 3.5.2 (default, Sep 10 2016, 08:21:44)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>>

Teljes siker :) Most már a fenti szkriptet is ki lehet próbálni, menni fog.

Mikre figyeljünk?

  • Használat előtt a virt. környezetet aktiválni kell!
  • A szkriptünk elejére mindig ezt a sort írjuk be: "#!/usr/bin/env python3". Ez ugyanis mindig a megfelelő python interpreter elérési útját adja vissza. Ha nincs virt. környezet aktiválva, akkor a globálisan telepített Pythonra mutat. Ha egy virt. környezet aktiválva lett, akkor a lokális Python interpreter elérési útját adja vissza.
  • Egy aktivált virt. környezetet a "deactivate" paranccsal lehet kikapcsolni. Ekkor a prompt visszaváltozik.

Tipp

  • Annyi virtuális környezetet hozhatunk létre, amennyit csak akarunk. Általában a projekteket külön-külön könyvtárba rakja az ember. Ezek mindegyikében ki lehet alakítani egy-egy virt. környezetet.

virtualenv telepítése

Virtualenv telepítése saját gépre vagy saját szerverre:

  1. A pip3 telepítve van? Ezt a "pip3" paranccsal lehet megnézni. Ha nincs: goto 2.
  2. sudo apt install python3-pip
  3. pip3 install virtualenv --user -U

Kapcsolódó videók

  • 001a - Python virtuális környezetek:

Javasolt alias-ok:

alias venv_init="python3 -m venv .venv"
alias venv_freeze="pip freeze --local"
alias on="source .venv/bin/activate"
alias off="deactivate"
Cloud City

  

Blogjaim, hobbi projektjeim

* The Ubuntu Incident
* Python Adventures
* @GitHub
* heroku
* extra
* haladó Python
* YouTube listák


Debrecen | la France


[ edit ]

Edit - History - Print *** Report - Recent Changes - Search
Page last modified on 2022 November 21, 16:41