🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ علیرضا دینی
تفاوت venv و virtualwnv در پایتون
جامعه پایتون (وب) ایجاد شده در ۲۲ اردیبهشت ۱۴۰۲

تفاوت ساخت محیط با دستور

python -m venv myworld

و روشی که در آموزش مطرح شده چیست؟

*گویا به بکیج وابستگی دارد python3.10-venv

درود امیدوارم حالتون خوب باشه

به طور خلاصه `venv` و `virtualenv` عملکرد مشابه‌ای دارن، اما در اجرا با تفاوت عمل میکنند. `venv` یک ماژول داخلی در پایتون ۳ هست، در حالی که `virtualenv` یک ابزار شخص ثالثه. در واقع `pyvenv` از پایتون ۳.۸ حذف شد و با `venv` جایگزین شد. `pyenv` یک ابزار است که به شما اجازه می‌دهد تا چندین نسخه از پایتون را در سیستم خود مدیریت کنید.

در کل انچنان فرقی ندارن به طور کلی مگر بخواید از پکیج منیجر هایی مثل pipenv یا poetry یا ... استفاده کنید

موفق باشید ?

Reza Mobaraki ۲۲ اردیبهشت ۱۴۰۲، ۱۶:۱۰

سلام و خسته نباشید.

رضا مبارکی عزیز ممنون از پاسخگوری سریعتون . راستش اون قسمت اول رو توی اینترنت دیده بودم. اما در قسمت دوم اشاره جالبی داشتین که ممنون میشم بیشتر توضیح بدین.

در واقع هدفم از پرسیدن این سوال مقایسه عمومی بین جوانب و حاشیه‌های استفاده از این دو متد بود. میخوام بدونم چرا دوتا روش که نتایج کاملا یکسانی داره کل گرفته و همچنان استفاده ازشون تداوم داره.

به عنوان مثال میزان فضای مصرفی بعد از نصب پکیج‌ها با هر دو روش به چه صورت است.

یا مثلا اینکه استفاده از VIRTUALENV در مقایسه با روش دوم از چه زمانی مرسوم شده و احتمالا تا کی قابل استفاده است؟ (جهت انتخاب ورژن و روشی که پشتیبانی بهتر و بلندمدت‌تری داره)

علیرضا دینی ۲۲ اردیبهشت ۱۴۰۲، ۱۶:۳۳

محیط‌های مجازی یا virtual environments در پایتون برای جدا کردن پکیج‌های مختلف و وابستگی‌هایشان به همدیگر ایجاد میشه. این ابزارها به توسعه‌دهندگان اجازه میدن که پکیج‌های مختلف را بدون تداخل با یکدیگر نصب و استفاده کنند. 


1. venv: وقتی از پایتون 3 استفاده می‌کنید و نیاز دارید تا یک محیط مجازی ساده و پیش فرض بسازید، می‌توانید از venv استفاده کنید. venv یک ماژول داخلی در پایتون 3 است و ابزاری برای ساخت محیط‌های مجازی برای پروژه‌های پایتون است.


2. virtualenv: وقتی از نسخه پایتون 2 استفاده می‌کنید، یا می‌خواهید یک محیط مجازی برای یک پروژه پایتون خاص داشته باشید، می‌توانید از virtualenv استفاده کنید. virtualenv یک ابزار سمت شخص ثالث است که به شما اجازه میده تا محیط‌های مجازی در پایتون را ساخته و استفاده کنید.


3. pyenv: اگر شما نسخه‌های مختلف پایتون رو در سیستم خود نصب کرده باشید، pyenv به شما امکان میده تا بین این نسخه‌ها سوئیچ کنید. pyenv یک ابزار سمت شخص ثالث است که میتونید برای مدیریت نسخه‌های مختلف پایتون در سیستم استفاده بشه.


4. pipenv: اگر شما در حال توسعه پروژه پایتونی بزرگی با وابستگی‌های پیچیده هستید، پیشنهاد می‌شود از pipenv استفاده کنید. pipenv یک ابزار سمت شخص ثالث است که به شما اجازه میده تا وابستگی‌های پروژه پایتون خودتون رو حرفه ای‌تر مدیریت کنید.


در واقع تعداد فایل‌های که هرکدوم میسازن متفاوته و حتی locate شدنشون ( مثلا در بعضی‌های تمام env‌های شما توی یک فایل توی سیستم قرار میگیره ولی بعضی در کنار پروژتون - یا بعضی دارای یک فایل lock. هستن و یک فایل اصلی )

این یک نمونه Pipfile مربوط به pipenv

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
asgiref = "==3.5.2"
django = "==4.0.4"
django-cors-headers = "==3.12.0"
django-extensions = "*"
djangorestframework = "==3.13.1"
pytz = "==2022.1"
sqlparse = "==0.4.2"
werkzeug = "*"
[dev-packages]
[requires]
python_version = "3.11"
python_full_version = "3.11.2"

همچنین در کنارش یک .lock

{
    "_meta": {
        "hash": {
            "sha256": "a73204c162c298bdc78fea7438c57a5352657afa444055c7351597972aba8b57"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_full_version": "3.11.2",
            "python_version": "3.11"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "asgiref": {
            "hashes": [
                "sha256:1d2880b792ae8757289136f1db2b7b99100ce959b2aa57fd69dab783d05afac4",
                "sha256:4a29362a6acebe09bf1d6640db38c1dc3d9217c68e6f9f6204d72667fc19a424"
            ],
            "index": "pypi",
            "version": "==3.5.2"
        },
        "django": {
            "hashes": [
                "sha256:07c8638e7a7f548dc0acaaa7825d84b7bd42b10e8d22268b3d572946f1e9b687",
                "sha256:4e8177858524417563cc0430f29ea249946d831eacb0068a1455686587df40b5"
            ],
            "index": "pypi",
            "version": "==4.0.4"
        },
        "django-extensions": {
            "hashes": [
                "sha256:2a4f4d757be2563cd1ff7cfdf2e57468f5f931cc88b23cf82ca75717aae504a4",
                "sha256:421464be390289513f86cb5e18eb43e5dc1de8b4c27ba9faa3b91261b0d67e09"
            ],
            "index": "pypi",
            "version": "==3.2.1"
        },
        "djangorestframework": {
            "hashes": [
                "sha256:0c33407ce23acc68eca2a6e46424b008c9c02eceb8cf18581921d0092bc1f2ee",
                "sha256:24c4bf58ed7e85d1fe4ba250ab2da926d263cd57d64b03e8dcef0ac683f8b1aa"
            ],
            "index": "pypi",
            "version": "==3.13.1"
        },
    "develop": {}
}

همونطور که میبینید به صورت کاملا جداشده و تمیز‌تری مدیریت شده و هر بخش develop یا ... مدیریت میشن


برای انتخاب یکی از این ابزارها بهتر هست به نیازهای پروژه و محیط اجرای اون توجه کنید. برای مثال، اگر می‌خواهید یک محیط مجزا برای هر پروژه ایجاد کنید و بدون تعارض با نسخه‌های دیگر Python روی سیستم خودتان کار کنید، ابزار venv یا virtualenv را پیشنهاد می‌کنیم. اگر قصد دارید با محیط‌های متفاوت Python کار کنید، ابزار pyenv را پیشنهاد می‌کنیم. اگر به دنبال ابزاری برای مدیریت وابستگی‌های پروژه هستید، ابزارهایی مانند pipenv و poetry برای شما مناسب خواهند بود.

همچنین، در صورتی که می‌خواهید بر روی یک محیط مجزا و ایزوله برای پروژه کار کنید، بهتر است از ابزارهایی مانند Docker استفاده کنید. به همین دلیل، ابزارهای مختلف برای کاربردهای مختلف و با توجه به نیازهای پروژه‌های مختلف مناسب هستند.


موفق باشید?

بهترین پاسخ
Reza Mobaraki ۲۲ اردیبهشت ۱۴۰۲، ۱۶:۵۶

عالی بود . ممنون بابت پاسخ جامع و کاملتون.

علیرضا دینی ۲۲ اردیبهشت ۱۴۰۲، ۱۷:۱۴