از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
مدیریت محیط های پایتون با direnv و pyenv
سرفصلهای مطلب
معرفی
به عنوان توسعه دهندگان پایتون، اکثر ما با آن آشنا هستیم محیط های مجازی. یکی از اولین کارهایی که هنگام کار انجام می دهیم روی یک پروژه جدید ایجاد یک محیط است. ما معمولا استفاده می کنیم virtualenv یا venv دقیقا برای همین منظور
هر پروژه ای که کار می کنیم روی از بسته های مختلف استفاده می کند و حتی ممکن است تنها با یک نسخه پایتون سازگار باشد.
انجام مکرر کاری، اتوماسیون را تضمین می کند. در این مقاله خواهیم دید که چگونه direnv
و pyenv
می تواند به ما در انجام آن کمک کند.
به عنوان یک نکته جانبی، برخی از IDE های مدرن قبلاً این مراحل را خودکار کرده اند. به عنوان مثال، PyCharm هنگام مقداردهی اولیه یک پروژه، محیط مجازی را ایجاد می کند:
اگرچه اگر از IDE هایی استفاده کنیم که از چنین قابلیت هایی پشتیبانی می کنند، خودکارسازی تمام این مراحل یک پیروزی بزرگ است، راه حل عمومی تر باید IDE-Agnostic باشد.
مشکلات از virtualenv
تصور کنید ما یک پروژه پیدا کردیم روی GitHub و ما دوست داریم با آن بازی کنیم. Pyweather یک اسکریپت ساده است که پیش بینی آب و هوای طولانی را برای مکان ما درخواست می کند و آن را چاپ می کند روی را terminal.
اینها مراحلی است که ما برای آزمایش فیلمنامه انجام می دهیم روی ماشین ما:
$ git clone https://github.com/lcofre/pyweather.git
$ cd pyweather
سپس محیط مجازی را ایجاد می کنیم و بسته هایی را که اسکریپت استفاده می کند نصب می کنیم:
$ virtualenv --python=python3 env
$ source env/bin/activate
(env) $ pip install requirements.txt
و تنها پس از آن، می توانیم اسکریپت را اجرا کنیم:
(env) $ ./pyweather.py
ما یک محیط مجازی ایجاد کردیم و آن را در آن ذخیره کردیم root پوشه پروژه ما در حالی که در آن پوشه بودیم باید محیط را با آن فعال می کردیم source
فرمان
پس از اتمام کار، باید با اجرا از محیط مجازی خارج شویم deactivate
:
(env) $ deactivate
تمام این مراحل مسئولیت ماست. چند بار ممکن است فراموش کرده باشیم که یک محیط را فعال کنیم و یک بسته را به صورت جهانی نصب کنیم!
بیایید ببینیم چگونه direnv
به ما کمک می کند این را خودکار کنیم.
direnv
direnv
بسته به اینکه عمدتاً برای بارگذاری متغیرهای محیطی ساخته شده است روی دایرکتوری فعلی و دارای پسوندی برای بسیاری از پوسته ها است.
در این مثال، ما از آن استفاده خواهیم کرد bash
، ولی direnv
بسیاری از پوسته های دیگر را نیز پشتیبانی می کند. و آنچه برای ما مهمتر است این است که به ما امکان مدیریت می دهد محیط های مجازی پایتون.
برای نصب آن را اجرا می کنیم bash
نصب کننده ای که ارائه می دهند ما می توانیم از مدیر بسته توزیع خود استفاده کنیم، اما bash
نصب کننده اطمینان حاصل می کند که ما آخرین نسخه موجود را نصب می کنیم:
$ curl -sfL https://direnv.net/install.sh | bash
حالا ما نیاز داریم hook direnv
به bash
. ما ویرایش می کنیم ~/.bashrc
و سپس آن را دوباره بارگذاری کنید:
$ echo 'eval "$(direnv hook bash)"' >> ~/.bashrc
$ source ~/.bashrc
بدین ترتیب direnv
خود را به پوسته پیوند می دهد و همیشه قبل از هر فرمان اجرا می شود. ما هرگز متوجه نمی شویم که در پس زمینه کار می کند.
direnv
بررسی می کند که آیا چیزی باید بارگذاری شود روی پوشه فعلی وجود فایلی به نام را بررسی می کند .envrc
، با دستورالعمل روی چه چیزی باید بارگذاری شود
برای بارگذاری محیط های مجازی پایتون، ما را اجرا می کنیم layout
دستور و به دنبال آن نسخه پایتون:
$ echo 'layout python' > .envrc
یا اگر بخواهیم از پایتون 3 استفاده کنیم:
$ echo 'layout python3' > .envrc
اجرای اینها نشان خواهد داد direnv
به دنبال a python
یا python3
قابل اجرا روی مسیر.
به محض ایجاد .envrc
به ما هشدار داده می شود که باید اجازه دهیم direnv
برای دسترسی به آن پوشه بیایید همین الان این کار را انجام دهیم:
$ direnv allow
direnv: loading .envrc
...
New python executable in /home/myuser/untitled/.direnv/python-3.6.9/bin/python3
...
Installing setuptools, pkg_resources, pip, wheel...direnv:
done.
direnv: export +VIRTUAL_ENV ~PATH
همانطور که در خروجی می بینیم، محیط مجازی بلافاصله ایجاد شد. با این حال، درخواست اصلاح نشده است، بنابراین نام محیط را در ابتدا نخواهیم دید.
اکنون می توانیم بسته های مورد نیاز خود را همانطور که انجام دادیم نصب کنیم روی محیطی که در قسمت قبل ایجاد کردیم:
$ pip install -r requirements.txt
direnv
بی صدا محیط را در پس زمینه فعال می کند. هر زمان که از دایرکتوری خارج شویم، محیط غیرفعال می شود:
$ cd ..
direnv: unloading
اگر بتوانیم از هر نسخه پایتونی که نصب شده است استفاده کنیم روی سیستم، direnv
تمام چیزی است که ما نیاز داریم
بیایید اکنون فرض کنیم که ما pyweather
اسکریپت به یک نسخه بسیار خاص نیاز دارد.
pyenv
pyenv
یک ابزار مدیریت نسخه برای پایتون است. از جمله موارد دیگر، امکان تغییر نسخه های پایتون را فراهم می کند روی بر اساس هر پروژه direnv
از زمان نسخه پشتیبانی از آن را فراهم می کند 2.21.0
، بنابراین با هم می توانند سطح بالاتری از کنترل را به ما بدهند روی نسخه ای که در محیط خود استفاده می کنیم.
بیایید با نصب شروع کنیم pyenv
:
$ curl -L https://pyenv.run | bash
و سپس اطمینان حاصل کنیم که همیشه در دسترس ما خواهد بود terminal:
$ echo 'export PATH="~/.pyenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
$ source ~/.bashrc
حالا بیایید خودمان را فرض کنیم pyweather
اسکریپت به یک نسخه پایتون بسیار خاص نیاز دارد، 3.6.2
.
ابتدا باید آن نسخه از پایتون را نصب کنیم:
$ pyenv install 3.6.2
و اکنون می توانیم پروژه خود را برای استفاده از نسخه خاص پیکربندی کنیم:
$ echo 'layout pyenv 3.6.2' > .envrc
$ direnv allow
ما می توانیم با بررسی نسخه پایتون در محیط، همه کارها را همانطور که انتظار می رود تأیید کنیم:
$ python --version
Python 3.6.2
اگر زمانی نیاز به تغییر نسخه پایتون داشته باشیم، برای ما کافی است که چیدمان را در آن تغییر دهیم .envrc
فایل.
به لطف هر دو ابزار ما می توانیم طرح بندی را به هر نسخه پایتون تغییر دهیم و محیط مجازی ما فوراً به روز می شود.
یکی دیگر از مزایای استفاده از هر دو direnv
و pyenv
این است که ما می توانیم نسخه خود را .envrc
فایل در مخزن پروژه ما.
به این ترتیب همه مشارکتکنندگان میتوانند تا زمانی که برنامههای کاربردی و نسخه پایتون مورد نیاز را نصب کنند، محیط خود را همانطور که پروژه در نظر گرفته است پیکربندی کنند.
نتیجه
محیط های مجازی به نوعی از گردش کار توسعه پایتون جدا شده اند. قبل از کار با پروژه خود باید به یاد داشته باشیم که آن را پیکربندی و فعال کنیم. با تشکر از direnv
و pyenv
ما میتوانیم همه اینها را خودکار کنیم، و وارد کردن پوشه پروژه همه کارها را در پسزمینه برای ما انجام میدهد.
نصب هر دو ابزار ساده نیست، اما پس از یک بار انجام، در زمان خود صرفه جویی می کنیم. همچنین همیشه این اطمینان را خواهیم داشت که با محیط مجازی مناسب و نسخه پایتون کار می کنیم.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-16 21:31:03