"Kérjük, kattintson ide, ha vissza szeretne térni a szülőcikkhez."

Ez a cikk minimális, lépésenkénti útmutatót nyújt a projekten belüli Python-importálás helyes beállításához, csak normál szövegszerkesztő és terminál használatával.

Ez a cikk a szülőcikk „egyszerű” projektstruktúráját fogja használni, ahol a forrásmappák és a tesztmappák ugyanazon a szinten vannak közvetlenül a projekt gyökérmappája alatt.

project 
│
├─── folder1
│    │    __init__.py
│    │    file1.py
│
├─── folder2
│    │    __init__.py
│    │    file2.py
│
└─── tests
     │    test_file.py

N.B. Ez a projektstruktúra mindenki számára megfelelő, aki nem tervezi kódjának terjesztését. Ha azonban azt tervezi, hogy a kódját másoknak terjeszti, pl. a PyPI-n keresztül, fontolja meg egy src projektstruktúra használatát. Kövesse ezt a linket (hamarosan), ha lépésről lépésre szeretne útmutatót találni a projektfájl importálásához a src projektstruktúra használatával.

Nyilatkozatok importálása

Győződjön meg arról, hogy az összes importálási utasítás helyesen van megírva. Minden importnak abszolút importnak kell lennie, a projektgyökértől kezdve.

Tekintsük a project/folder1/file1.py, amely egy egyszerű add() függvényt tartalmaz.

# project/folder1/file1.py
def add(num1, num2):
    return num1 + num2

Ezt a függvényt szeretnénk használni a project/folder2/file2.py -ban. Az importálásunk egyszerűen from folder1 import file1 – egy abszolút import, amely a projekt gyökér alatt kezdődik.

# project/folder2/file2.py
from folder1 import file1
print('1 + 2 =', file1.add(1, 2))

Győződjön meg arról, hogy a projekt összes importálása így van beállítva.

Importálás beállítása a terminálhoz

Az importálás megfelelő működéséhez a projektet megfelelő Python-csomaggá kell alakítania, és telepítenie kell.

Számos dolgot kell tennie:

  • Hozzon létre egy venv-t (ha még nem tette meg)
  • Frissítse a csomageszközöket a venv-ben
  • Hozzon létre egy csomagot a projekthez
  • Telepítse projektjét

Hozzon létre egy venv

Ha már létrehozta és aktiválta a venv-t, és beállította a VS kódot a venv használatára, nyugodtan hagyja ki ezt a részt.

A projekt telepítéséhez létre kell hoznia egy venv-t (a virtuális környezet rövidítése). A venv a Python könnyű változata, amely elkülönül a Python rendszertelepítésétől, és általában minden új Python-projekthez jön létre. A csomagok venv-re történő telepítése azt jelenti, hogy az egyes Python-projektek csomagjai el vannak különítve egymástól.

Nyisson meg egy új terminált, és győződjön meg arról, hogy a terminálkönyvtár a projekt gyökérmappájára van állítva. Ezután futtassa a következő parancsot a shellben:

  • Windows 7_
  • macOS/Linux: python3 -m venv venv
C:\...\project> py -m venv venv

Ez a parancs utasítja a venv csomagot, hogy hozzon létre egy új virtuális környezetet számunkra a venv könyvtárnévvel.

project
│
├─── folder1
│    │    __init__.py
│    │    file1.py
│
├─── folder2
│    │    __init__.py
│    │    file2.py
│
└─── tests
│    │    test_file.py
│
└─── venv

Aktiválja a venv-t. Ehhez futtassa a activate.bat programot Windows CMD-héjakon, a activate.ps1-t Windows Powershell-eken vagy a activate-t macOS/Linux-héjakon. Ha látja a (venv) előtagot a tolmácson, akkor tudni fogja, hogy a venv megfelelően aktiválva van.

C:\...\project> c:/.../project/venv/Scripts/activate.bat
(venv) C:\...\project>

(A virtuális környezetekkel kapcsolatos további információkért látogasson el a következő linkre: https://docs.python.org/3/tutorial/venv.html )

Frissítse a csomageszközöket a venv-ben

A setuptools segítségével Python-csomagot hozunk létre a projektből, a pip-t pedig a helyi telepítéshez. Annak érdekében, hogy minden a lehető legzökkenőmentesebben menjen, ajánlatos mindkét csomagot naprakészen tartani.

Ha a terminál nyitva van és a venv aktív, futtassa a következő parancsot:

  • Windows: py -m pip install --upgrade pip setuptools
  • macOS/Linux: python3 -m pip install --upgrade pip setuptools

Ha azt az üzenetet kapja, hogy a pip és a setuptools is sikeresen telepítve lett, folytassa tovább.

Hozzon létre egy csomagot a projekthez

Most létre kell hoznia egy csomagot a projekthez. Ehhez egy setup.py fájlt kell létrehozni a setuptools csomag segítségével, amelynek már elérhetőnek kell lennie a Python telepítésében.

A projekt gyökérmappája alatt hozzon létre egy setup.py nevű fájlt.

project
│    setup.py
│
├─── folder1
│    │    __init__.py
│    │    file1.py
│
├─── folder2
│    │    __init__.py
│    │    file2.py
│
└─── tests
│    │    test_file.py
│
└─── venv

setup.py népesítése így:

# /project/setup.py
from setuptools import setup, find_packages
setup(
    name='project',
    packages=find_packages(),
)

Ennek a fájlnak a tartalmát egyelőre így hagyhatjuk a célunkra, ami az importálás helyben történő működését szolgálja. Ha később tervezi a kód terjesztését, akkor vissza kell térnie ehhez a fájlhoz, és szükség szerint módosítania kell.

A projekt telepítése

Most telepítse a projektet a venv-re. A projekt „szerkeszthető” módban lesz telepítve – ez annak köszönhető, hogy a telepítés minden módosítása automatikusan frissül, ahogy a projekt kódja megváltozik.

Menjen a terminálhoz. Győződjön meg arról, hogy a venv aktív, és a könyvtár a projekt gyökérre van állítva. Ezután futtassa a következő parancsot a shellben:

  • Windows: py -m pip install -e .
  • macOS/Linux: python3 -m pip install -e .
(venv) C:\...\project> py -m pip install -e .

Miután a shell azt mondja, hogy a projektet sikeresen telepítették, készen áll.

(venv) C:\...\project> py -m pip install -e .
Obtaining file:///C:/.../project
Installing collecting packages: project
  Running setup.py develop for project
Successfully installed project

A projekt telepítésének további megerősítése egy .egg-info mappa megjelenése a projekt mappájában.

project
│    setup.py
│
├─── folder1
│    │    __init__.py
│    │    file1.py
│
├─── folder2
│    │    __init__.py
│    │    file2.py
│
├─── project.egg-info
│
├─── tests
│    │    test_file.py
│
└─── venv

És kész is vagyunk!

Körbejárás volt, de odaértünk! Ha most futtatja a kódot vagy a teszteket a héjból, mindennek működnie kell.

project/folder1/file1.py:

def add(num1, num2):
    return num1 + num2

project/folder2/file2.py:

from folder1 import file1
print('1 + 2 =', file1.add(1, 2))

Kód futtatása a terminálon keresztül:

(venv) C:\...\project> py folder2\file2.py
1 + 2 = 3

Tesztek futtatása a terminálon keresztül:

# output trimmed for brevity
C:\...\project> pytest
collected 1 item.
tests\test_file.py
1 passed in 0.02s