Python болон Bash нөхөрлөлийг бий болгох нь: smart-env болон python-shell номын сангууд

Бүгдэд нь энэ өдрийн мэнд.

Өнөөдөр Python бол зөвхөн програм хангамжийн бүтээгдэхүүнийг өөрсдөө бий болгох төдийгүй дэд бүтцийг нь хангах чиглэлээр хамгийн их хэрэглэгддэг хэлүүдийн нэг юм. Үүний үр дүнд олон девопууд өөрсдийн хүслээр эсвэл түүний эсрэг байсан ч хуучин сайн Баш бичгүүдэд нэмэлт болгон ашиглах шинэ хэл сурах шаардлагатай болсон. Гэсэн хэдий ч Bash болон Python нь код бичихэд өөр өөр хандлагыг хүлээн зөвшөөрдөг бөгөөд зарим онцлог шинж чанартай байдаг бөгөөд энэ нь Bash скриптийг "могойн хэл" рүү шилжүүлэх нь заримдаа багтаамжтай бөгөөд өчүүхэн ажил биш болж хувирдаг гэсэн үг юм.

Devops-ийн амьдралыг хөнгөвчлөхийн тулд Python-д олон хэрэгтэй номын сан, хэрэгслүүдийг бүтээсэн бөгөөд одоо ч бий болгосоор байна. Энэ нийтлэлд энэ нийтлэлийн зохиогчийн үүсгэсэн хоёр шинэ номын санг тайлбарласан болно. smart-env и питон бүрхүүл - мөн Python-той ажиллах нарийн ширийн зүйлд маш их анхаарал хандуулж, илүү сонирхолтой ажлуудад орон зай үлдээх хэрэгцээ шаардлагаас devops-ийг чөлөөлөх зорилготой юм. Номын сангийн үйл ажиллагааны хамрах хүрээ нь орчны хувьсагч, гадаад хэрэгслүүдийг эхлүүлэх явдал юм.

Сонирхсон хүн муурыг үзээрэй.

Шинэ "унадаг дугуй"?

Ердийн үйл ажиллагаанд зориулж яагаад шинэ багцуудыг бий болгох хэрэгтэй юм шиг санагдаж байна. os.environ болон дэд процессыг ашиглахад юу саад болж байна.<таны сонгосон арга эсвэл анги> шууд?

Би номын сан тус бүрийг тус тусад нь нотлох баримт өгөх болно.

smart-env номын сан

Өөрийнхөө санаа бодлыг бичихээсээ өмнө интернетэд орж, бэлэн шийдлүүдийг хайж олох нь ашигтай байдаг. Мэдээж хэрэг, хэрэгтэй зүйлээ олохгүй байх эрсдэлтэй, гэхдээ энэ нь "даатгалын тохиолдол" юм. Дүрмээр бол энэ арга нь үр дүнтэй бөгөөд маш их цаг хугацаа, хүчин чармайлтыг хэмнэдэг.

Үр дүнгийн дагуу хайх дараах зүйл илэрсэн.

  • os.environ руу дуудлага хийх багцууд байдаг боловч үүнтэй зэрэгцэн анхаарал сарниулах олон үйлдэл шаарддаг (ангиллын жишээ үүсгэх, дуудлагад тусгай параметрүүд гэх мэт);
  • Сайн багцууд байдаг, гэхдээ тэдгээр нь тодорхой экосистемтэй нягт холбоотой байдаг (ихэвчлэн Django гэх мэт вэб фреймворкууд), тиймээс файлгүйгээр бүх нийтийнх биш юм;
  • шинэ зүйл хийх оролдлого ховор байдаг. Жишээлбэл, бичих нэмэх гэх мэт аргуудыг дуудаж хувьсагчийн утгыг тодорхой задлан шинжлэх
    get_<typename>(var_name)

    Эсвэл энд бас нэг шийдэл, гэхдээ энэ нь одоо гутамшигтай Python 2-г дэмждэггүй (гэхдээ албан ёсны RIP, бичигдсэн код, бүхэл бүтэн экосистемийн уулс байсаар байна);

  • Сургуулийн сурагчдын гар урлал нь тодорхойгүй шалтгааны улмаас дээд түвшний PyPI-д орж, зөвхөн шинэ багцуудыг нэрлэхэд асуудал үүсгэдэг (ялангуяа "smart-env" нэр нь зайлшгүй шаардлагатай арга хэмжээ юм).

Мөн энэ жагсаалтыг удаан хугацаанд үргэлжлүүлж болно. Гэсэн хэдий ч дээр дурдсан зүйлүүд нь надад тохиромжтой, бүх нийтийн зүйл хийх санааг өдөөхөд хангалттай байсан.

smart-env бичихээс өмнө тавигдсан шаардлага:

  • Ашиглалтын хамгийн энгийн схем
  • Тохируулахад хялбар өгөгдөл бичих дэмжлэг
  • Python 2.7 нийцтэй
  • Туршилтаар сайн кодын хамрах хүрээ

Эцсийн эцэст энэ бүхэн биелсэн. Хэрэглээний жишээ энд байна:

from smart_env import ENV

print(ENV.HOME)  # Equals print(os.environ['HOME'])

# assuming you set env variable MYVAR to "True"

ENV.enable_automatic_type_cast()

my_var = ENV.MY_VAR  # Equals boolean True

ENV.NEW_VAR = 100  # Sets a new environment variable

Жишээнээс харахад шинэ ангитай ажиллахын тулд та үүнийг импортлоход л хангалттай (та жишээ үүсгэх шаардлагагүй - нэмэлт үйлдлийг хассан). Аливаа орчны хувьсагч руу хандах нь үүнийг ENV ангиллын хувьсагч гэж нэрлэснээр хүрдэг бөгөөд энэ нь үнэндээ энэ ангиллыг үндсэн системийн орчны хувьд ойлгомжтой боодол болгож, нэгэн зэрэг бараг бүх системийн тохиргооны объект болгон хувиргадаг ( жишээлбэл, Django-д ижил төстэй хандлагыг хэрэгжүүлдэг, зөвхөн тэнд тохиргооны объект нь тохиргооны модуль/багц өөрөө юм).

Автоматаар бичихийг дэмжих горимыг идэвхжүүлэх/идэвхгүй болгох нь enable_automatic_type_cast() болон disable_automatic_type_cast() гэсэн хоёр аргыг ашиглан хийгддэг. Хэрэв орчны хувьсагч нь цуваажсан JSON-тэй төстэй объект эсвэл зүгээр л логикийн тогтмолыг агуулж байвал энэ нь тохиромжтой байж болох юм (Джанго дахь DEBUG хувьсагчийг орчны хувьсагчийг "хүчинтэй" мөртэй харьцуулах нь хамгийн түгээмэл тохиолдлын нэг юм). Гэхдээ одоо мөрүүдийг тодорхой хөрвүүлэх шаардлагагүй - ихэнх шаардлагатай үйлдлүүд аль хэдийн номын сангийн гүнд суулгагдсан бөгөөд дохио өгөхийг л хүлээж байна. 🙂 Ерөнхийдөө шивэх нь ил тод ажилладаг бөгөөд бараг бүх суулгасан өгөгдлийн төрлүүдийг дэмждэг (frozenset, цогцолбор болон байтуудыг шалгаагүй).

Python 2-г дэмжих шаардлагыг бараг ямар ч золиослолгүйгээр (Python 3-ын хамгийн сүүлийн үеийн хувилбаруудын шивэх, зарим "чихрийн чихэр" -ийг орхисон), ялангуяа хаа сайгүй байдаг зургаагийн ачаар (мета ангиудыг ашиглах асуудлыг шийдэхийн тулд) хэрэгжсэн. ).

Гэхдээ зарим хязгаарлалтууд байдаг:

  • Python 3-ийн дэмжлэг гэдэг нь 3.5 ба түүнээс дээш хувилбар гэсэн үг (энэ нь таны төсөлд байгаа нь залхуурал эсвэл сайжруулалт хийх шаардлагагүйгээс үүдэлтэй, учир нь та 3.4 дээр байгаа объектив шалтгааныг олоход хэцүү байдаг);
  • Python 2.7-д номын сан нь багц литералуудыг цувралаас гаргахыг дэмждэггүй. Тодорхойлолт энд. Харин хэрэгжүүлэх хүсэлтэй хүн байвал урьж байна :);

Номын сан нь задлан шинжлэхэд алдаа гарсан тохиолдолд үл хамаарах механизмтай байдаг. Хэрэв мөрийг байгаа анализаторуудын аль нэг нь таних боломжгүй бол утга нь мөр хэвээр үлдэнэ (хувьсагчид Bash-д хэрхэн ажилладаг ердийн логиктой нийцтэй байдал, хоцрогдсон нийцтэй байдлын үүднээс).

питон бүрхүүлийн номын сан

Одоо би танд хоёрдахь номын сангийн талаар хэлье (Одоо байгаа аналогуудын дутагдлын тайлбарыг орхих болно - энэ нь ухаалаг env-д тайлбарласантай төстэй юм. Аналогууд - энд и энд).

Ерөнхийдөө хэрэгжүүлэх санаа, түүнд тавигдах шаардлага нь smart-env-д тайлбарласантай төстэй бөгөөд үүнийг жишээнээс харж болно.

from python_shell import Shell

Shell.ls('-l', '$HOME')  # Equals "ls -l $HOME"

command = Shell.whoami()  # Equals "whoami"
print(command.output)  # prints your current user name

print(command.command)  # prints "whoami"
print(command.return_code)  # prints "0"
print(command.arguments)  # prints ""

Shell.mkdir('-p', '/tmp/new_folder')  # makes a new folder

Энэ санаа нь:

  1. Python ертөнцөд Bash-ийг төлөөлдөг ганц анги;
  2. Bash команд бүрийг Shell ангийн функц гэж нэрлэдэг;
  3. Дараа нь функцийн дуудлага бүрийн параметрүүдийг харгалзах Bash командын дуудлагад шилжүүлнэ;
  4. Тушаал бүрийг дуудаж байгаа тэр мөчид "энд, одоо" гүйцэтгэдэг. синхрон арга нь ажилладаг;
  5. stdout дахь командын гаралт болон түүний буцах код руу хандах боломжтой;
  6. Хэрэв тушаал системд байхгүй бол онцгой тохиолдол гардаг.

smart-env-ийн нэгэн адил Python 2-г дэмждэг (хэдийгээр бага зэрэг золиослох цус шаардлагатай байсан ч) Python 3.0-3.4-ийг дэмждэггүй.

Номын сангийн хөгжлийн төлөвлөгөө

Та одоо номын санг ашиглаж болно: хоёуланг нь албан ёсны PyPI дээр байрлуулсан. Эх сурвалжийг Github дээрээс авах боломжтой (доороос үзнэ үү).

Сонирхсон хүмүүсийн санал хүсэлтийг харгалзан хоёр номын санг хөгжүүлнэ. Хэрэв smart-env-д олон төрлийн шинэ боломжуудыг гаргахад хэцүү байж магадгүй бол python-shell-д нэмж оруулах өөр зүйл байгаа нь гарцаагүй.

  • блоклохгүй дуудлагыг дэмжих;
  • багтай интерактив харилцах боломж (stdin-тэй ажиллах);
  • шинэ шинж чанаруудыг нэмэх (жишээлбэл, stderr-аас гаралтыг хүлээн авах өмч);
  • боломжтой командуудын лавлахыг хэрэгжүүлэх (dir() функцтэй ашиглах);
  • гэх мэт.

лавлагаа

  1. smart-env номын сан: Github и PyPI
  2. питон бүрхүүлийн номын сан: Github и PyPI
  3. Telegram суваг номын сангийн шинэчлэлтүүд

UPD 23.02.2020/XNUMX/XNUMX:
* Хадгалах сангуудыг зөөж, холбогдох холбоосыг шинэчилсэн
* Python-shell==1.0.1 хувилбарыг 29.02.2020 оны XNUMX/XNUMX-нд гаргахаар бэлтгэж байна. Өөрчлөлтөд автоматаар гүйцээх команд болон dir(Shell) командын дэмжлэг, хүчингүй Python танигчтай командуудыг ажиллуулах, алдаа засах зэрэг орно.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх