Olyan hosztolt privát PyPi Python Package kiszolgálót kerestem, amely a csapat már rendelkezik hitelesítő adatokkal (például GitHub).
Nem akartam helyszíni szervert létrehozni. Számunkra ez lehetetlenné tenné a felhőalapú build szerverek használatát, és ez egy másik mozgó rész, amely hibás lehet. A finom szemcsés biztonsággal és a sebességgel is vannak potenciális problémák. (Világméretű csapatunk van, ezért hasznos lenne a tartalom CDN-n keresztül történő kiszolgálása.)
Nem akartam arra kényszeríteni a csapatot, hogy számlákat hozzon létre egy másik szolgáltatónál. Már rendelkeznek Active Directory és GitHub fiókkal. Ez bosszúságot jelent számukra, és kormányzási terhet jelent számomra.
Sajnos nem találtam ilyen szolgáltatást. A GemFury kiváló, de nem támogatja a GitHub engedélyezést (csapat / szervezet szinten), a Packagr pedig egyáltalán nem támogatja a GitHub engedélyezést. A MyGet szintén kiváló, lehetővé teszi a GitHub engedélyezés használatát, de nem üzemeltet Python csomagokat. Az Azure DevOps-nak van valami, ami ígéretesnek tűnik, de jelenleg privát bétaverzióban van.
Szerencsére ez lehetséges a felhő Git tárházak, például a GitHub, a GitLab és a BitBucket használatával.
A Pip csomagokat telepíthet a Gitből
Tároltam egy Python csomagot a GitHub-on (python_world), amelyet a következő paranccsal telepíthet (győződjön meg róla, hogy megbízik bennem, mielőtt futtatja ezt a parancsot, és telepíti a kódomat a számítógépére).
pip install git+//github.com/ceddlyburge/python_world#egg=python_world
A Pip lehetőséget kínál a telepítésre fejből, ágból, címkéből vagy elkötelezettségből. Az egyes kiadásokat általában ezekről a címkékről címkézem és telepítem. A részletekért lásd a pip install dokumentációját.
Ez az adattár nyilvános, de ugyanúgy működik egy privát repóval is, amennyiben van engedélye. Nincs külön varázslat (ez egy vanília Python csomag), és a Setup.py a legtöbb munkát a szokásos módon végzi.
Ha még nem ismeri a Python-csomagok létrehozását, akkor a Packaging Python Projects oktatóanyagot érdemes gyorsan elolvasni.
A Setuptools telepítheti a Git függőségeit is
A legtöbb ember a Setuptools segítségével készít Python csomagokat.
Tároltam még egy csomagot a GitHub python_hello oldalon, amely a python_world függvénye. (Biztos vagyok benne, hogy láthatja, merre tart ez.)
A setup.py megfelelő bitjei alább találhatók. install_requires
megadja, hogy python_world
melyik függőség szükséges, és megmondja a Setuptools-nak, hol találja meg.
install_requires=[ '[email protected]+//github.com/ceddlyburge/python_world#egg=python_world-0.0.1', ]
Az alábbi paranccsal telepítheti ezt a csomagot. Letölti a függő python_world
csomagot is.
pip install git+//github.com/ceddlyburge/python_hello#egg=python_hello
Ez a (z) egy adott verziójához kapcsolódik python_world
, ami szégyen, mivel azt jelenti, hogy a pip nem tud semmilyen függőségkezelést végrehajtani (például elfogadható verziót dolgozhat ki, ha több dolog támaszkodik rá). Ennek a cikknek a végére azonban eltávolítottuk az adott link szükségességét.
Python környezetek
Mint mindenki tudja, aki környezet nélkül használta a Pythont, a környezetek sok csalódást és pazarolt időt spórolnak meg. Tehát támogatnunk kell ezeket.
Létrehoztam egy repót (use-hello-world), amely python_hello
a követelmények.txt függőségeként határozza meg a Virtualenv-t, a environment.yml pedig a Conda-t.
Ha letölti a repót, a következő paranccsal telepítheti a függőségeket a virtualenv-be.
pip install -r requirements.txt
Ha condát használ, használhatja ezt a parancsot:
conda env create -n use-hello-world
PyPi Index
Eddig képesek vagyunk a Git privát tárházainkból csomagokat telepíteni. Ezek a csomagok viszont meghatározhatják a függőségeket más privát tárolóktól. Még mindig nincs PyPi szerver a láthatáron.
Ezen a ponton megállhatunk. A függőségek meghatározásának szintaxisa azonban kissé rejtélyes. A csapat számára nehéz lenne felfedezni, hogy mely csomagok állnak rendelkezésre, és a függő csomagok konkrét verzióihoz kapcsolódunk, ahelyett, hogy hagynánk a pip kezelni.
Ennek kijavításához létrehozhatunk egy PyPi indexet, amely megfelel a Pep 503-nak. Ez a specifikáció meglehetősen egyszerű, és most készítettem kézzel az indexet. Ha ez túl nehézkessé válik, akkor előállíthatom a GitHub API-ból.
Ezt a PyPi indexet a GitHub Pages segítségével hoztam létre. A GitLab és a BitBucket esetében vannak egyenértékű dolgok. Láthatja, hogy a forráskód nagyon egyszerű. A GitHub Pages webhelyek mindig nyilvánosak (és valószínűleg nincsenek érzékeny információk az indexében). Ha azonban magánéletre van szükséged, használhatsz olyan szolgáltatást, mint a PrivateHub.
Egy dologra figyelni kell, a specifikáció név normalizálása. Ehhez meg kell python_hello
adni a csomaginformációkat python-hello/index.html
(vegye figyelembe az aláhúzásból a kötőjelbe történő változást).
Most, hogy PyPi szerverünk van, az alábbi paranccsal telepíthetjük a csomagokat.
pip install python_hello --extra-index-url //ceddlyburge.github.io/python-package-server/
Annak érdekében, hogy láthassa ezt a környezetekkel való együttműködésben, létrehoztam egy másik repót (use_hello_world_from_server), amely python_hello
a közvetlen GitHub Linkek helyett a PyPi index használatával határozza meg a függőséget. Ha a Condával próbálkozik, akkor a> 4.4-es verzióra van szükség.
Ezen a ponton visszaléphetünk és eltávolíthatjuk a közvetlen Git hivatkozást az install_requires fájlban a python_hello setup.py fájljában (mivel a Setuptools képes lesz megtalálni a szerverünkről).
Következtetések
A felhőben tárolt Git szolgáltató PyPi-kiszolgálóként történő használata életképes lehetőség. Ha már használ egyet, ez azt jelenti, hogy újból felhasználhatja a már meglévő hitelesítő adatokat és engedélyeket. A Cloud build szerverekkel fog működni, és valószínűleg CDN-en keresztül fogják biztosítani, így világszerte gyors lesz. Több tudást igényel a telepítése, mint egy hosztolt szerver, de valószínűleg ugyanannyi vagy kevesebb, mint a saját szerverének helyben történő tárolása.
Tanácsok és tippek
Az index helyi kiszolgálása segíthet a problémák (például a név normalizálása) elhárításában. Könnyen belátható, hogy milyen kérések érkeznek. Ehhez használhatja a beépített python HTTP szervert ( python -m Http.Server -8000
). Ez arra késztetett, hogy megtudjam, hogy kéréseket pip search
használ post
, ezért nem fog működni a GitHub-oldalakkal.
Futtathatja, python setup.py -install
hogy helyben ellenőrizze a pip csomagjait, mielőtt Githez tolná őket.