ควรสร้าง Virtualenvs ที่ไหน?


109

ฉันสับสนว่าฉันควรใส่คุณธรรมของตัวเองไว้ที่ไหน

ด้วยโปรเจ็กต์ django แรกของฉันฉันสร้างโปรเจ็กต์ด้วยคำสั่ง

django-admin.py startproject djangoproject

จากนั้นฉันลงซีดีในไดเร็กทอรี djangoproject และรันคำสั่ง

virtualenv env

ซึ่งสร้างไดเร็กทอรีสภาพแวดล้อมเสมือนที่ระดับเดียวกับdjangoprojectไดเร็กทอรีภายใน

นี่เป็นสถานที่ที่ผิดในการสร้าง Virtualenv สำหรับโครงการนี้โดยเฉพาะหรือไม่?

ฉันรู้สึกประทับใจที่คนส่วนใหญ่เก็บรวบรวมความสามารถทั้งหมดไว้ด้วยกันในไดเร็กทอรีที่แตกต่างกันโดยสิ้นเชิงเช่น~/virtualenvsจากนั้นใช้ Virtualenvwrapper เพื่อสลับไปมาระหว่างพวกเขา

มีวิธีที่ถูกต้องในการทำเช่นนี้หรือไม่?

คำตอบ:


129

หลายคนใช้เครื่องมือVirtualenvwrapperซึ่งเก็บ Virtualenv ทั้งหมดไว้ในที่เดียวกัน ( ~/.virtualenvsไดเร็กทอรี) และอนุญาตให้ใช้ทางลัดในการสร้างและเก็บไว้ที่นั่น ตัวอย่างเช่นคุณอาจทำ:

mkvirtualenv djangoproject

และหลังจากนั้น:

workon djangoproject

อาจเป็นความคิดที่ไม่ดีที่จะเก็บไดเร็กทอรี Virtualenv ไว้ในโปรเจ็กต์เนื่องจากคุณไม่ต้องการแจกจ่าย (อาจเป็นเฉพาะสำหรับคอมพิวเตอร์หรือระบบปฏิบัติการของคุณ) ให้เก็บไฟล์ requirements.txt แทนโดยใช้pip :

pip freeze > requirements.txt

และแจกจ่ายสิ่งนั้น สิ่งนี้จะช่วยให้ผู้อื่นที่ใช้โปรเจ็กต์ของคุณสามารถติดตั้งข้อกำหนดเดียวกันทั้งหมดลงใน Virtualenv ด้วย:

pip install -r requirements.txt

ดีฉันไม่เคยมองเข้าไปในสิ่งต่างๆของ pip แต่ถ้าฉันต้องการสักวันสิ่งนี้จะเป็นประโยชน์
Joran Beasley

pip เป็นที่นิยมอย่างมากในชุมชน Django และใช้งานง่ายมาก
David Robinson

ขอบคุณเดวิดนั่นคือสิ่งที่ฉันคิด ฉันรู้เกี่ยวกับสิ่งที่ต้องการและกำลังทำสิ่งนั้น ฉันไม่แน่ใจว่า Venv ควรไปที่ไหน ความคิดเห็นของคุณเกี่ยวกับการเป็นระบบปฏิบัติการเฉพาะเป็นเหตุผลที่ดีในการทำตามที่คุณแนะนำ
เรย์

เป็นไปได้ไหมที่จะย้ายสภาพแวดล้อมเสมือนจริงหลังจากสร้างขึ้นแล้ว? ฉันใส่ไว้ในไดเรกทอรีโครงการของฉันโดยไม่เจตนา
James Wierzba

6
ไม่ใช่ IMO เหตุผลที่ดี นี่ไม่ใช่สิ่งที่. gitignore มีไว้เพื่อ?
Josh Noe

24

การเปลี่ยนตำแหน่งของไดเร็กทอรี Virtualenv จะทำให้มันแตก

นี้เป็นหนึ่งในข้อได้เปรียบของการวางนอกไดเรกทอรีของต้นไม้ที่เก็บเช่นภายใต้ด้วย~/.virtualenvsvirutalenvwrapper

มิฉะนั้นหากคุณเก็บไว้ในโครงสร้างโครงการการย้ายที่ตั้งโครงการจะทำลายคุณธรรม

ดู: การเปลี่ยนชื่อโฟลเดอร์ Virtualenv โดยไม่ทำลายมัน

มี--relocatableแต่เป็นที่รู้กันว่าไม่สมบูรณ์แบบ

ข้อดีเล็กน้อยอีกอย่าง: คุณไม่จำเป็นต้องทำ .gitignoreมัน

ข้อดีของการวาง gitignored ในแผนผังโครงการคือ:

  • เก็บสิ่งที่เกี่ยวข้องไว้ใกล้กัน
  • คุณมีแนวโน้มที่จะไม่ใช้ Virtualenv ซ้ำในโปรเจ็กต์ต่างๆดังนั้นการวางไว้ที่อื่นไม่ได้ให้ประโยชน์มากนัก

3
นี่เป็นข้อโต้แย้งที่สมเหตุสมผลเพียงข้อเดียวที่ฉันเคยเห็นในการสร้างโฟลเดอร์ Virtualenv นอกแผนผังโครงการ! แนวทางอื่น ๆ ดูเหมือนจะทำซ้ำความเชื่อ 'การรวมศูนย์' ราวกับว่ามันเป็นแนวทางปฏิบัติที่ดีที่สุดโดยเนื้อแท้แทนที่จะเป็นการประนีประนอมที่โชคร้ายเนื่องจาก Virtualenvs ถูกทำลายโดยพื้นฐาน (แม้ว่าจะมีประโยชน์มาก!)
rob3c

ขออภัยมีบางอย่างที่ไม่ชัดเจนสำหรับฉันคุณจึงแนะนำให้สร้างในแผนผังโครงการแล้ว "gitignoring" หรือสร้างใน ~ / .virtualenvs "ถ้าไม่ใช่เพื่อสิ่งนั้น" หมายถึงอะไร
aderchox

1
@aderchox มีการแลกเปลี่ยน: ใส่ลงในแผนผังโครงการและต้นไม้จะย้ายคุณต้องติดตั้งใหม่หรือวางไว้ ~ แต่จัดการกับ subdir พิเศษนอกโครงการ
Ciro Santilli 郝海东冠状病六四事件法轮功

5

สถานที่ที่ยอมรับโดยทั่วไปในการวางไว้คือสถานที่เดียวกับที่การติดตั้งเริ่มต้นของ Virtualenvwrapper ทำให้: ~/.virtualenvs

ที่เกี่ยวข้อง: Virtualenvwrapper เป็นเครื่องมือที่ยอดเยี่ยมที่ให้ shorthands สำหรับคำสั่ง Virtualenv ทั่วไป http://www.doughellmann.com/projects/virtualenvwrapper/


0

ถ้าคุณใช้pyenv install Pythonแล้วpyenv-virtualenvจะเป็นวิธีที่ดีที่สุด หากตั้งค่า.python-versionไฟล์จะสามารถเปิดใช้งานหรือปิดใช้งาน env เสมือนโดยอัตโนมัติเมื่อคุณเปลี่ยนโฟลเดอร์งาน Pyenv-virtualenvใส่ env เสมือนทั้งหมดลงใน$HOME/.pyenv/versionsโฟลเดอร์ด้วย


0

จากประสบการณ์ส่วนตัวของฉันฉันขอแนะนำให้จัดระเบียบสภาพแวดล้อมเสมือนทั้งหมดในไดเรกทอรีเดียว เว้นแต่ว่าใครจะมีหน่วยความจำที่คมชัดมากและสามารถจำไฟล์ / โฟลเดอร์ที่กระจัดกระจายไปตามระบบไฟล์ได้ ไม่ใช่แฟนตัวยงของการใช้เครื่องมืออื่น ๆ เพียงเพื่อจัดการสภาพแวดล้อมเสมือนจริง ใน VSCode ถ้าฉันกำหนดค่า ( python.venvPath) ไดเร็กทอรีที่มีสภาพแวดล้อมเสมือนทั้งหมดจะสามารถจดจำทั้งหมดได้โดยอัตโนมัติ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.