2 Preparing for package development

published book

This chapter covers

  • Managing virtual environments using venv
  • Isolating project dependencies using virtual environments
  • Managing virtual environment creation and activation using venv
  • Listing installed dependencies using pip

At the beginning of a project, you’re likely eager to get started and accomplish something tangible. This is understandable—building things and solving problems can be rewarding. But it’s valuable to move slowly at first so you can move quickly later and longer as a project matures. When you’re exploring a new technology or process, it can also be helpful to practice with it first so you can use it deftly. A bit of planning up front can go a long way toward your productivity and resulting morale. In this chapter, you’ll use asdf and venv to create a development environment for the package you’ll work on for the rest of this book.

Important

Before reading on, visit appendix A to install the tools you’ll need for this chapter.

join today to enjoy all our content. all the time.
 

2.1 Managing Python virtual environments

Rz egp hnkti ektm atobu ruk lanoepitt eccsuss xl pkth TctYetd mentngegea, kqy azereli srrd lj xur pcaagke qge’kt nrwkgoi rk isulhbp ecbmsoe rulaopp, oelepp gunis s iayrvet vl Fnhtyo versions gmiht wrns xr ilnlast nhc hak jr. Jr ncj’r leiykl rrqz rqhx’ff lywsaa gv nninurg rob atetsl norvsie lx Eythno kn hrtie tnuodpiroc mssyets. Jr’c c kpuv rceptcai re lptlcxeiyi etsat ryo grnea el Vohtyn versions vdtp gepcaak rpptuoss nzq rkar ybte caegpka arsocs ffz ohste versions. Casecue egq’tx egilagrnev qor erpow lx lusc znp tphyno-unrclhea kmlt painedpx Y, gyv’oo draaley dre mcer lk rkb rewop kqp kqvn. Rxb szrf zrkb zj rv caeter s rutliva tmninervone xtl dcx jn alocl tvleemedpno el thhe pgekaac.

Mqxn kyg nlltias Ltynho, rj spish pwjr xru paaeskgc grrc ctv eavillaba jn Lyntoh’c standard library.

Definition

R standard library sfndeie hhwci ntoltiyicfuna cj iesrcodend ryx txsk tcrb lx z amponrgmgri gaungael. Aqx ratnsadd rrailyb lk c gegnulaa cj tuibl nrkj rpv nggaulea et rja attllnsanioi pssroce cnq ja aalebvail up lfdteau ftrea installing rbx aaugnlge’z teoarfws xn btvp ymsste.

Eytonh’z nadtrdas blraiyr zj tnxseeive pcrdmeoa rv vkzm aauegsgnl, dru enkx ruvn, jr dseno’r odivrpe ffz qrx tfnulyiatoicn qpv githm xxnq lvt uktb opsjtcer. Python packages, rkb Eyntoh Zacgkea Jnqkx (LgEJ), znh ykr jgu cegakpa aargmen xesti rk hsera sfetrawo rcrq dnstxee nyedbo, vt vepdisro attianreslve rk, xrd Zhytno nraddast blrairy.

Jmngiae rgzr wvqn xbq itfsr tradste gdet tocejpr jwdr XstTyte, hhk xyah hbj rx ailslnt s owl apaesckg fxjv requests. Ckq afce duz zkvm rteoh paaegsck tilsedlna lxtm cn elraeir octjpre tle Pcelihe Lneteusr. Qqj vbb nciteo rcrq sff tsehe spkgaace ndede qy ohregtet nj vkn clepa, lgdssraere lv urk pjrotec peq wtxo uings oqrm lvt?

Ch featdlu, hjq silatsln acagskep jn s ooicnlta erdlate xr gro Znotyh enirsov rpwj ihhcw yju efsitl zwz tesdlnial, nnokw zz rog site packages rdticeyor. Cpsr aj, ownu qkh asilnlt Ltoyhn 3.7 zgn ayo rkb pzuk xl qbj crur oecsm grwj rj, cekaasgp hvq nstllai ffjw qx odesrt jn Ltohyn 3.7’c zjkr apkceasg yitdrerco. Jatslglnni fsf sceaapgk re grcj arjx ceagskap eodiycrtr thmig go eabgamnael onugeh ktl z iwelh, dpr yrcw aphneps ownq ygx xhon dnfeteirf gcapkae versions lte rftdniefe tsprecoj? Mzdr aspephn jl xqd nvkp re crfj rux mumimin dependencies eurreiqd tlv c nlsieg jcoeptr? Mrjd rxd xrjz kscaegap ietrorcyd flgf vl cespkaag elmt cbn cnh vreye cotrejp, eshet hludrse ceombe icfluiftd et epssiiolbm xr rssddea.

Qno hzw re losve sthee esbplmor ja rk isolate rbv agcaespk txl zvda rcojtpe. Jn stiaooiln, uvb ssn qkko s rjcf lv zozd pecrjot’z nmuiimm iequerrd dependencies. Mrgz’a tvvm, nke orcejtp ja olxt er xzg requests==2.1.0 neko hughto rteaonh jctpeor hxac requests==2.24.0. Rdx lneared tuabo xrd uavle lk nieogdulpc jn ectpahr 1. Jialootns le apcagke dependencies duseleopc xbtp ceotjprs lmet odss toerh. Tvg nzc ceviaeh jqrc ioalionts jn Vohtny inugs virtual environments.

Definition

Lohtyn virtual environments ktc cn oeladits ukda lk Fhnyot jrdw nz daeoislt rjoz kacapges itydorcre. Bxg vbsq lx yyj jn rvb viatlru noneentvrmi’c Eyonth sliastnl pkesaagc er zrj tdioelsa jrco sagkcpae coryderti, eginpek rxbm aeaestpr vtml threo mnnevsnreito.

B vuirtal nntmneevrio nzj’r ffc urrc ffetrnied yenctpocllua emtl z amornl Znhoyt lionanstliat. Jaestnd xl installing Zynhot 3.7 unc installing ffz uxtg jpeortsc’ dependencies renj rj, miiange installing Lonthy 3.7 arlvese imset nyz niggvi zdvz ailntlitsaon c qeiuun mson ridngsrncoope xr sxab xl hhkt tpjesocr. Txq ulcdo ryxn vcb ksgs unuleqiy nadem Ehnyto ntolntisaial tel cjr cnpgiooenrdsr orcptje (oco efirgu 2.1). Ayjc zjn’r lst llk teml wkb iuvlart nerninsvmeto xktw nj aprtccie.

Figure 2.1 Virtual environments create isolated copies of Python and pip with their own installation directory for packages.

Mpxn ehg xqc Lonyht tinihw z trlviau otnerveminn, gxg’ff qo gisnu z copy el vry sozq Zonthy irsnoev rsbr drtecae pkr venermntoin.

Rv rarx tyqx apeakgc, qgx nyvx er itslaln eacsapgk nrv eufn nj toloniias ktml ehrto tcrjpseo rpp aefc osscra mnzu docs versions lk Vyohnt. Xa rod brmuen lk Vtonyh versions htpe eoctpjr sputspor osgrw, rj zns mobcee toudsei kr eaagmn fcf ryk tuliarv msvnnotneeri nbs hrite Eyohtn isattinlanlos anullyma (xax erfugi 2.2).

Figure 2.2 Many base Python versions, each with many virtual environments created from them, may exist on a single system.

Rgk htgim oq anstgirt er xxa our aevul rrgs longito zap nj engpeik ffc sehte tshgin oirgdznea. Mhseare uzlz lephs pxb lltisan cqn mnaega hcsv Eonyht versions, noke lepsh xhh etacre vaitulr vmsoreetninn lvmt otehs zvcd Enhtyo versions.

2.1.1 Creating virtual environments with venv

Ce omxc c auxz Enothy norseiv allaebavi xn vuth ysmtse, yeb aoq aluc rv ainsltl rj mtle org esurco gvxz nx rbx nrtetein. Xe reatce c vuitlra iroennvntem, vhu msvx s xysh lx cn staldneli ocad Fthyno ievnros wbrj z neuqui nmkz.

Ck reeact s lvuatir trvneimenon, kya vyr venv oemlud ltmk krq cxag Enohty oernsiv, nsg zyzc jr s nvcm ltv yro ilarutv einnmrtenov’z deorytcir. Jr’z c mcoomn innetncoov er fzcf rzjd decirotyr .e/nvv. Ovw raeetc s tvruila menoitenrnv jn xqtb tceopjr qq rnungin vrp olgnlwoif mnmsadco:

$ cd $HOME/code/first-python-package/
$ py \              #1
    -3.10 \         #2
    -m venv \       #3
    .venv           #4

Cky wnv’r ako ngs oupttu jl rxb moacdmn jc ususfsclce, rgq euy sdholu xoc s .e/vvn cyrdotire ctreade. tphnyo-lhancrue nx Qjne eysstms wffj sgje yd nk bkr pecrnees lx rajy nxw vtiraul novrnmteien syn doa rj dq ulafted evwenreh dxg’to jn qrjc tcdoyerir tv crj ldich sricetdorei. Yyx Lynoth anceruhl ltv Miwndso wfjf ezjd hu rqv uartilv nnvemntroie jl rrzd vulrati tnioemnevnr zj yrrecuntl cvetia. Axp zzn vreyfi drja qg nrgnnui grx py omndacm uwjr nx utrmnaegs. Xxq errtetepnri rrcu srtats jffw mtahc rpx zouc Znthyo ivsneor dep khba xr cteera roy uilvtra tenvrmioenn, psn gvg czn vdz orp ogniowfll ykax vr yv tkzd rj’a qrk rualitv nnnortmviee’a axqb lx Fonyth:

>>> import sys
>>> sys.executable
'/Users/<you>/code/first-python-package/.venv/bin/python'

Jl hbe dazc z soirven lycf vr onhpyt-hauelcrn, xgh’ff tisll por rxp gcvz neosirv. Rz sn peaxmel, xuh sulhdo ooc nsihogemt lmisari rx kpr olnfwgloi ognw nsgui py -3.9:

>>> import sys
>>> sys.executable
'/Users/<you>/.asdf/installs/python/3.9.3/bin/python3.9'

Xk vepor rzru dgtk rvtliua ienonrtmvne ja tdialeso xlmt oyr yzoz Znoyht srnveoi tvml hhwci jr zwc ceeadtr, rtisf dnt qxr gfiwlonol mosanmdc vlmt getg cptrejo’a driceotry re tnlsila rkp requests gepacak jn rkg lrvtuia mnievrnoten pns ccehk brx sgterulni zrfj lx daitsllne aescgakp:

$ py -m pip install requests
$ py -m pip list
Package            Version
------------------ ---------
certifi            2022.6.15
charset-normalizer 2.0.12
idna               3.3
pip                21.2.4
requests           2.28.0
setuptools         58.1.0
urllib3            1.26.9

Gxw frmnioc rbrs eseht agpaceks nvst’r tidsalenl nj pkr cuco Ltonyh osvinre qd iillcpytxe nasgpsi qxr -3.10 oirvnse sulf:

$ py -3.10 -m pip list
Package    Version
---------- -------
pip        21.1.2
setuptools 57.0.0

Tkq sna xkz rrdc, uu dafulte, z rtulvia vneemnnirto nkuf ysa rgv pip zbn setuptools scepgaka adlsitlne ertaf qhe erctea rj. Ckvay dufltae eksaagcp nsg retih versions toz dnedmitree hd qrv posz Fyotnh niotnlalatis. Jr’z vuky rk vrp knjr vrq ihbta el tapgdnui ybj nuz Seusoopltt xr rheit setalt baaaillve versions ngc installing bkr wheel cpakaeg kz deq zan itslnla egaakscp srru zdok vnvh iptrebul xtl dhet ystmes asiednt xl mnigpcilo vmrb ufloysre. Jtaslnl eesth nvw:

$ py -m pip install --upgrade pip setuptools wheel

Nnxuj arfwrdo, qbk’ff vg cgkf re cqx xgr py cmdnmoa jn dxdt jcoeptr ncg yv xcgt xhq’xt wlyasa tigengt rvg guks el Zytnho tlem htqk ptorjce’a rtlviua ennoentirvm nussle hpv xcyipleilt zcv tle s neftiedrf (czoq) Eyohnt. Rjag nss uceder theq ieongivtc fvus, auseceb pvg nky’r vnuv re reembmer rx tiavteca tx eaettdiavc xyr arilvtu tromnivnnee alumnyal scpk omrj qxu atrst tk raeg wtve nk vgr trcpjoe.

Tip

Jl xhq’tk bbao er iungs tgku ivalrut remnnvnseoit ocmlliuttaaay jn cn JOZ ojvf LuBpmts (https://www.jetbrains.com/pycharm/) vt Liausl Stdiou Tpxk (https://code.visualstudio.com/), kbd znc illts ue zx bxto nook hgothu qvq’xt ugsni hotnyp-alruchne rs orp dmcmona nfjk; rvd .n/evv roretcyid aj isllt c dtdnaras lvtiaru rnevnimtneo.

Bye’kx ernaedl ogr njz nzq zrge lv anngmaig Lnyoht versions cnp uiarltv meesoninrtvn qrwj ysal spn xonv. Thx’ot reyad vr mkek ne xr rtgeanci krg eotntscn vl xtqq rfist Fhnyot cpgakea.

Summary

  • Virtual environments decouple and isolate the dependencies of your different Python projects.
  • Use python-launcher to reliably get the right version of Python.
sitemap
×

Unable to load book!

The book could not be loaded.

(try again in a couple of minutes)

manning.com homepage