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 ]

Py /

Virtualenv

Virtuális környezet használata Python 2.7-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 pip install <csomag>" paranccsal, akkor a csomag "globális" helyre fog települni. Python 2.7 esetében általában az alábbi könyvtárak valamelyikébe:

/usr/local/lib/python2.7/dist-packages
/usr/lib/python2.7/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. a shrek szerveren).

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.

shrek

Az IK hallgatói hozzáférnek a shrek.unideb.hu szerverhez. Felvettem a kapcsolatot a rendszergazdákkal és felrakták nekünk a virtualenv csomagot. Ennek a használatát akkor javaslom, ha a shrek-en olyan Python projektet akarnak futtatni, amiben olyan 3. fél által írt modulokat akarnak haszálni, amik nincsenek felrakva a shrek-re.

Példa:

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

#!/usr/bin/env python

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 a shrek-en fent van-e a requests modul:

$ python
Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40)
[GCC 4.4.5] on linux2
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 venv". Ez létrehoz egy venv nevű könyvtárat, ebben lesz a virtuális környezetünk.
  • A "which python" paranccsal nézzük meg, hogy hol van a Python interpreter: /usr/bin/python .
  • 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 python" parancsot. Hoppá! Ez már a virt. környezetünkben lévő 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)szathmar@shrek:~/python$ python
Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40)
[GCC 4.4.5] on linux2
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 python". 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. Mivel a shrek-en korlátozott a rendelkezésre álló hely s egy "szűz" virt. környezet is 8-9 MB-ot foglal, ezért azt javaslom, hogy a virt. környezetet a HOME/python könyvtárban alakítsák ki, majd ide tegyék be a futtatandó szkripteket (vagyis több szkript is ugyanazt az egy virt. környezetet használja).

virtualenv telepítése

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

  1. A pip telepítve van? Ezt a "pip" paranccsal lehet megnézni. Ha nincs: goto 2.
  2. sudo apt-get install python-pip
  3. Akár fent volt a pip, akár most raktuk fel, frissítsük: sudo pip install pip -U
  4. sudo pip install virtualenv
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 2016 October 06, 13:44