ฉันสามารถย้าย Virtualenv ได้หรือไม่?


93

คำถามนี้ไม่ซ้ำกัน

ไม่เพียง แต่เกี่ยวข้องกับการเปลี่ยนชื่อสภาพแวดล้อมเสมือนเท่านั้น แต่ยังรวมถึงการย้ายไปยังไดเร็กทอรีอื่นซึ่งรวมถึงไดเร็กทอรีของผู้ใช้อื่นด้วย

สิ่งนี้ไม่เหมือนกับการเปลี่ยนชื่อสภาพแวดล้อมเสมือนโดยเฉพาะกับคนที่ไม่คุ้นเคยกับความสามารถพิเศษ

หากฉันสร้าง Virtualenv และย้ายไปยังโฟลเดอร์อื่นจะยังใช้งานได้หรือไม่

$ virtualenv -p /usr/bin/python3 /home/me/Env/my-python-venv
$ source Env/my-python-venv/bin/activate
(my-python-venv) $ 

... ต่อมาในวันนั้นสภาพแวดล้อมเสมือนถูกย้าย ...

(my-python-venv) $ deactivate
$ mkdir -p /home/me/PeskyPartyPEnvs
$ mv /home/me/Env/my-python-venv /home/me/PeskyPartyPEnvs/

คำถาม:

จะได้ผลหรือไม่

$ source /home/me/PeskyPartyPEnvs/my-python-venv/bin/activate
(my-python-venv) $ /home/me/PeskyPartyPEnvs/my-python-venv/bin/pip3 install foaas

ฉันหมายความว่านี่เป็นคำถามน้อยกว่าเกี่ยวกับภูมิปัญญาในการลองทำสิ่งนี้ (เว้นแต่ว่าภูมิปัญญานั้นจะเป็นเรื่องตลก) และข้อมูลอื่น ๆ เกี่ยวกับความเป็นไปได้ ฉันอยากรู้ว่ามันเป็นไปได้ไหมที่จะทำใน Python 3 หรือฉันแค่ต้องดูดมันขึ้นมาแล้วโคลน

ฉันสามารถmvเป็นvirtualenvแบบนั้นโดยไม่มีความเศร้าได้หรือไม่? ฉันต้องการหลีกเลี่ยงความเศร้า

คำตอบ:


70

ใช่. เป็นไปได้ที่จะย้ายไปบนแพลตฟอร์มเดียวกัน คุณสามารถใช้--relocatableกับสภาพแวดล้อมที่มีอยู่

จาก--help:

- สามารถเชื่อมต่อได้ - ทำให้สภาพแวดล้อมที่มีอยู่ที่มีอยู่สามารถเคลื่อนย้ายได้ สิ่งนี้แก้ไขสคริปต์และทำให้ไฟล์. pth ทั้งหมดสัมพันธ์กัน

อย่างไรก็ตามสิ่งนี้ดูเหมือนจะไม่เปลี่ยนactivateสคริปต์และเปลี่ยนเฉพาะสคริปต์pip*และeasy_install*สคริปต์เท่านั้น ในactivateสคริปต์ $VIRTUAL_ENVตัวแปรสภาพแวดล้อม hardcoded /path/to/original/venvเช่นเดิม $VIRTUAL_ENVตัวแปรที่ใช้ในการตั้งค่าPATHของสภาพแวดล้อมการใช้งานของคุณมากเกินไปดังนั้นจึงต้องมีการเปลี่ยนแปลงขึ้นอยู่กับสถานที่ใหม่ในการสั่งซื้อที่จะเรียกpythonและpipอื่น ๆ โดยไม่ต้องเส้นทางแน่นอน

ในการแก้ไขปัญหานี้คุณสามารถเปลี่ยน$VIRTUAL_ENVตัวแปรสภาพแวดล้อมในactivateสคริปต์ (ตัวอย่างเช่นการใช้sed) และทุกอย่างควรจะเป็นไปด้วยดี

ตัวอย่างการใช้งาน:

$ cd ~/first
$ virtualenv my-venv
$ grep 'VIRTUAL_ENV=' my-venv/bin/activate
VIRTUAL_ENV="/home/username/first/my-venv"
$ virtualenv --relocatable my-venv
Making script my-venv/bin/easy_install relative
Making script my-venv/bin/easy_install-2.7 relative
Making script my-venv/bin/pip relative
Making script my-venv/bin/pip2 relative
Making script my-venv/bin/pip2.7 relative
### Note that `activate` has not been touched
$ mkdir ~/second
$ mv my-venv ~/second
$ cd ~/second
$ grep 'VIRTUAL_ENV=' my-venv/bin/activate
VIRTUAL_ENV=/home/username/first/my-venv
### (This variable hasn't been changed, it still refers to the old, now non-existent directory!)
$ sed -i -e 's|username/first|username/second|' my-venv/bin/activate
## sed can be used to change the path.
## Note that the `-i` (in place) flag won't work on all machines. 
$ source my-venv/bin/activate 
(my-venv) $ pip install foass
...
(my-venv) $ python 
[...]
> import foass

ไชโยตอนนี้คุณสามารถติดตั้งสิ่งต่าง ๆ และโหลดลงในสภาพแวดล้อมเสมือนที่ตั้งขึ้นใหม่ได้แล้ว


//, หืม. ดูเหมือนจะไม่ได้จบลงด้วยการย้ายที่ตั้งใหม่ ฉันได้รับข้อผิดพลาดบางอย่างเกี่ยวกับข้อผิดพลาดที่ไม่ใช่ไฟล์สคริปต์ "ปกติ"
Nathan Basanese

7
"ขณะนี้ - ตัวเลือกที่เชื่อมโยงกันได้มีปัญหาหลายประการและไม่รับประกันว่าจะใช้งานได้ในทุกสถานการณ์เป็นไปได้ว่าตัวเลือกนี้จะเลิกใช้งานในรุ่นต่อไปของ Virtualenv " (ของฉันเน้น) ดูคู่มือผู้ใช้
BobTuckerman

1
ฉันลองสิ่งนี้บน windows และข้อผิดพลาดแสดงรายการสคริปต์ทั้งหมด (* .py, * .bat, * .ps1) ในScriptsdir (เทียบเท่ากับbinบน * nix) และพูดว่าactivate.ps1 cannot be made relative (it's not a normal script that starts with #!c:\..python.exe.โดยทั่วไปแล้วมันบ่นว่าแฮช - แบงในไฟล์ ส่วนหัวไม่ใช่ python.exe ของ Virtualenv ปัจจุบันเป็นส่วนที่ฉันย้ายจาก -easy fixed ฉันดูในสคริปต์สุดหรูนั้นและมันก็ค้นพบเส้นทางของตัวเองอยู่ดี - ดี สคริปต์อื่น ๆ บางสคริปต์ไม่ได้อาศัยพา ธ (เช่น deactivate.bat) ดังนั้นในระยะสั้นสิ่งนี้ก็ใช้ได้
ดาวอส

2
@NathanBasanese activate.ps1 cannot be made relativeสามารถละเว้นข้อความได้เนื่องจากสคริปต์นั้นสัมพันธ์กันแล้ว ข้อความนี้ไม่มีประโยชน์ใน Windows เนื่องจากสคริปต์ไม่ใช้#!คำสั่งเช่นเดียวกับใน Linux เพื่อบอกเชลล์ว่าแอปพลิเคชันใดควรเรียกใช้ activate.batไม่ได้รับการแก้ไข แต่มันไม่ได้ใช้ (อย่างน้อยในหน้าต่าง 10 เรียกactivateเปิดตัวสคริปต์ POSH) เพื่อไม่ฉันไม่จำเป็นต้องไปที่การแก้ไขสคริปต์ใด ๆ ปัญหาคือpip.exeมีเส้นทางไปยัง python แบบฮาร์ดโค้ดและต้องการการแก้ไขด้วย hex-editor หรือเพียงแค่ติดตั้งใหม่
ดาวอส

3
@Sgedda ในการหวนกลับฉันจะบอกว่าอย่าทำแบบนี้ สภาพแวดล้อม Python ของคุณควรสร้างขึ้นใหม่ได้อย่างง่ายดายโดยใช้ขั้นต่ำpip freezeในไฟล์ข้อกำหนดเพื่อให้คุณสามารถติดตั้งแพ็คเกจใหม่ทั้งหมดของคุณนักเทียบท่า (ทำงานได้ดีกับ Virtualenv ที่ติดตั้งไว้), conda, pyenv หรือเครื่องมืออื่น ๆ คุณควรสามารถสร้างและทำลายสภาพแวดล้อมเป็นโครงสร้างพื้นฐานที่ไม่เปลี่ยนรูปได้สิ่งเหล่านี้ไม่ควรมีค่า
Davos

19

สำหรับ Python 3.3+ (พร้อมvenvโมดูลในตัวใหม่)

คำตอบสั้น ๆ (โดยไม่คำนึงถึงเวอร์ชัน):

  • ไม่มีวิธีที่ชัดเจนและตรงไปตรงมาในการย้ายสภาพแวดล้อมเสมือนจริง
  • แค่สร้างใหม่มันง่ายมาก !!


คำตอบยาว:

ใน Python v3.3 virtualenvได้กลายเป็นโมดูลในตัวชื่อvenv.

--relocatableตัวเลือกที่กล่าวถึงในคำตอบอื่น ๆ ไม่ได้รับการรวมอยู่ในvenvและในปัจจุบันมีไม่ดีวิธีที่ปลอดภัยที่ฉันรู้ที่จะเปลี่ยนชื่อหรือย้ายสภาพแวดล้อมเสมือนงูหลาม

อย่างไรก็ตามมีวิธีที่ค่อนข้างง่ายในการสร้างสภาพแวดล้อมเสมือนขึ้นใหม่ด้วยแพ็คเกจที่ติดตั้งในปัจจุบันทั้งหมด ดูคำตอบนี้หรือดูส่วนด้านล่างสำหรับข้อมูลเกี่ยวกับการสร้างสภาพแวดล้อมเสมือนใหม่ ในระหว่างกระบวนการคุณสามารถสร้างสภาพแวดล้อมใหม่ในสถานที่ใดก็ได้และด้วยชื่อใดก็ได้ที่คุณต้องการ หรือดูขั้นตอนด้านล่างนี้

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

หมายเหตุ:ในคำตอบนั้นก็จะเน้นเรื่องมากกว่าvirtualenv venvดูวิธีการแปลด้านล่าง



venvเทียบกับvirtualenvไวยากรณ์คำสั่งที่เก่ากว่า

คำสั่งที่จะใช้venvคือ:

python -m venv

แทนที่จะเป็นเพียงแค่virtualenvซึ่งติดตั้งเป็นคำสั่งในแพ็คเกจดั้งเดิม โดยที่ "python" หมายถึงอย่างไรก็ตามคุณเรียกใช้ python executable ซึ่งอาจเป็นได้หลายอย่างเช่น:

  1. python
  2. pyหรือpy -3.7หรือคล้ายกัน ( Python Launcher สำหรับ Windowsสำหรับ Python 3.3+ และ Windows เท่านั้นในขณะนี้)
  3. python3 (การประชุมสำหรับสภาพแวดล้อม linux ที่ติดตั้ง python 2 และ 3 เป็นคู่)
  4. หากคุณประสบปัญหาให้ใช้พา ธ สัมบูรณ์ไปยังไฟล์ปฏิบัติการ python ที่คุณต้องการเรียกใช้: เช่น c:\program files\python37\python.exe

หากคุณไม่แน่ใจว่ากำลังเรียกใช้เวอร์ชันใดคุณสามารถpython --versionค้นหาได้ตลอดเวลา



วิธีสร้างสภาพแวดล้อมเสมือนใหม่

การสร้าง / สร้างสภาพแวดล้อมเสมือนใหม่เป็นเรื่องง่ายและควรกลายเป็นลักษณะที่สองหลังจากที่คุณทำงานกับพวกเขาสักหน่อย กระบวนการนี้สะท้อนถึงสิ่งที่คุณจะทำเพื่อแจกจ่ายสคริปต์ของคุณเป็นแพ็กเกจ (โดยมีการอ้างอิง) ในครึ่งแรกจากนั้นจะมีคนทำอะไรเพื่อติดตั้งสคริปต์ / แพ็คเกจของคุณเพื่อการพัฒนาต่อไป

ขั้นแรกรับรายการปรับปรุงของสิ่งที่อยู่ในสภาพแวดล้อมเสมือน เมื่อใช้งานได้รับเวอร์ชัน Python ที่ใช้และบันทึกรายการการอ้างอิงลงในไฟล์

  1. ใช้python --versionกับสภาพแวดล้อมเสมือนที่เปิดใช้งานเพื่อดูว่าใช้ Python เวอร์ชันใดอยู่

    • เพื่อความชัดเจนคุณอาจต้องการอัปเดตเวอร์ชัน Python ด้วยเหตุผลหลายประการ - อย่างน้อยก็เป็นเวอร์ชันแพตช์ล่าสุด
    • ตัวอย่างเช่นหาก venv ที่มีอยู่ใช้ Python v3.7.4 แต่ตอนนี้ v3.7.6 ออกให้ใช้ v3.7.6 แทนซึ่งควรรวมเฉพาะความปลอดภัยและการแก้ไขข้อบกพร่องที่ไม่ทำลาย
  2. ใช้python -m pip freeze > requirements.txtเพื่อสร้างรายการการอ้างอิงแพ็กเกจปัจจุบันและใส่ลงในrequirements.txtไฟล์ คำสั่งนี้ใช้ได้ใน Linux หรือ Git Bash แน่นอน - ไม่แน่ใจ 100% เกี่ยวกับ Powershell หรือ Command Line ใน Windows

ตอนนี้สร้างสภาพแวดล้อมเสมือนใหม่แล้วเพิ่มการอ้างอิงจากสภาพแวดล้อมเก่า

  1. สร้าง Venv ใหม่ของคุณ

    • ตรวจสอบให้แน่ใจว่าคุณใช้ python เวอร์ชันที่ถูกต้องที่คุณต้องการติดตั้งลงใน venv
    • หากคุณต้องการให้เป็นเวอร์ชัน Python เดียวกัน:
      • เรียกใช้ python โดยตรงจากสภาพแวดล้อมเสมือนปัจจุบัน (โดยเปิดใช้งาน) และใช้pythonเป็นคำสั่ง
      • หรือใช้เส้นทางสัมบูรณ์python.exeในโฟลเดอร์สภาพแวดล้อมเสมือน
    • สำหรับรายการโฟลเดอร์ venv ใหม่ในคำสั่ง:
      • เพิ่มเส้นทางแบบสัมบูรณ์หรือแบบสัมพัทธ์ไปยังตำแหน่งโฟลเดอร์สุดท้ายที่ต้องการ
      • ใช้python -m venv my_new_venvเพื่อสร้างสภาพแวดล้อมเสมือนใหม่ในไดเร็กทอรีการทำงานปัจจุบันในmy_new_venvโฟลเดอร์ใหม่
      • ชื่อของโฟลเดอร์ venv จะเป็นชื่อของ venv (สิ่งที่ปรากฏในพรอมต์เมื่อเปิดใช้งาน)
  2. ติดตั้งการอ้างอิงของคุณจากrequirements.txtไฟล์

    • python -m pip install -r requirements.txt

คุณอาจต้องติดตั้งแพคเกจภายในเครื่องใหม่ที่อยู่ในโหมดการพัฒนา

หมายเหตุหากคุณต้องการดูตำแหน่งเฉพาะที่ติดตั้งแพ็กเกจให้ใช้:

  • python -m pip list -v
  • -vหรือ "verbose" ตัวเลือกที่จะเพิ่มบางข้อมูลเพิ่มเติมเกี่ยวกับแต่ละแพคเกจที่มีการติดตั้งรวมถึงเส้นทางที่มีการติดตั้งใน. นี้จะเป็นประโยชน์ที่จะทำให้แน่ใจว่าคุณจะทำให้เสมือนผู้ใช้และระบบที่ติดตั้งแพคเกจตรง

ณ จุดนี้คุณสามารถลบโฟลเดอร์ venv เก่าและเนื้อหาทั้งหมดได้ ฉันแนะนำให้ใช้ GUI สำหรับสิ่งนั้น - การลบไฟล์มักจะถาวรจากบรรทัดคำสั่ง linux และการพิมพ์ผิดเล็กน้อยอาจเป็นข่าวร้าย


ไม่มีวิธีคัดลอกสถานะ venv pip หรือไม่โดยไม่ต้องดาวน์โหลดไลบรารีทั้งหมดด้วย pip อีกครั้ง
Aydo

ฉันไม่แน่ใจว่าเหตุผลที่คุณต้องการ - เป็นเพราะสถานการณ์แบนด์วิธที่ต่ำมากในอินเทอร์เน็ตหรือต้องทำซ้ำจำนวนมากหรือไม่? ฉันเชื่อว่าคุณสามารถรับซิปทั้งหมดจาก pypi แล้วติดตั้งในเครื่องได้ แต่ฉันไม่ได้เร่งความเร็วขนาดนั้น ฉันรู้ว่าคุณสามารถตั้งค่าเซิร์ฟเวอร์ pip ภายในเพื่อโฮสต์แพ็คเกจได้
LightCC

ปัญหา (ที่ฉันกำลังพยายามแก้ไข) คือฉันต้องการเรียกใช้สคริปต์ python บนเครื่องที่ไม่อนุญาตให้การรับส่งข้อมูลเครือข่ายไปยัง pip (หรือเกือบทุกที่) ฉันใส่ไฟล์ได้ แต่มันคุยกับ pip ไม่ได้ เป็นกรณีเฉพาะอย่างแน่นอน แต่ทำไมฉันต้องย้ายสิ่งเหล่านี้
Richard Rast

@RichardRast นั่นเป็นปัญหาที่แตกต่างฉันแค่ตอบคำถามเดิม หมายเหตุ: มีวิธีแก้ไขสำหรับปัญหาของคุณ (ดาวน์โหลดแพ็กเกจเป็นซิปและติดตั้งในเครื่องเรียกใช้เซิร์ฟเวอร์มิเรอร์ PyPi หลังไฟร์วอลล์ของคุณ ฯลฯ ) แต่นี่ไม่ถูกต้อง: ถาม & ตอบสำหรับเรื่องนั้น ..
LightCC

2
คุณสามารถสร้างวงล้อจากแพ็คเกจทั้งหมดของคุณได้pip wheel . -w wheelsจากนั้นเพียงติดตั้งแพ็คเกจใหม่ในสภาพแวดล้อมเสมือนใหม่ด้วยpip install --no-index --find-links /path/to/wheels/ -r requirements.txt
np8

7

--relocatableอาร์กิวเมนต์virtualenvจะปรากฏขึ้นเพื่อให้คุณสามารถทำเช่นนี้


// สิ่งนี้อาศัยเส้นทางสัมพัทธ์หรือไม่หรือว่ามันลิงไปรอบ ๆ อย่างอื่น?
Nathan Basanese

1
- สามารถเชื่อมต่อได้ใช้งานได้เฉพาะสภาพแวดล้อมเสมือนที่มีอยู่ เรียกใช้virtualenv --relocatable my-python-venvหลังจากที่มีสภาพแวดล้อมอยู่แล้ว
hilcharge

1
จาก--help: This fixes up scripts and makes all .pth files relative. ไม่มันจะไม่สร้างห้องสมุดอิสระของแพลตฟอร์ม หากคุณต้องการย้ายไปยังแพลตฟอร์มอื่นคุณจะต้องติดตั้งใหม่โดยใช้ python ในเครื่อง
hilcharge

5
โมดูล python3 venv ไม่รองรับแฟล็กนี้
Nelson

7

แต่ ALAS:

mvไม่ได้คุณไม่สามารถเพียง มีวิธีแก้ปัญหา แต่อาจจะง่ายกว่าในการติดตั้งใหม่

(my-python-venv)$ /home/me/PeskyPartyPEnvs/pip3 install foaas
zsh: /home/me/PeskyPartyPEnvs/pip3: bad interpreter: /home/me/Env/my-python-venv/bin/python3: no such file or directory
(my-python-venv)$ deactivate
$ 

... กดดันenterมากด้วยความไม่พอใจและผลต่อไปนี้

$
$
$ pip3 search foaas

ยกเว้นไม่ได้มาจากmy-python-venvความโศกเศร้า

ต้องการmvของคุณvirtualenvและใช้มันไม่ได้แก้ไขหรือไม่?

คำตอบสั้น ๆ :

ฉันจะให้โบโรเมียร์พูดเพื่อที่เขาจะได้พูดให้ชัดเจน:

ดียาไม่สามารถ


2
เว้นแต่คุณต้องการรับเลือดและแก้ไขให้เหมาะสม: ลิงก์ในไบนารีในถังขยะที่ทำให้เกิดปัญหาการเคลื่อนไหว ถ้าคุณรู้ว่าคุณมาจากไหนคุณสามารถใช้บางอย่างเช่นfind bin -type f -exec ex -sc "%s,${FROM},${PWD},g|x" {} \;สมมติว่า bin และ lib ของคุณอยู่ในโฟลเดอร์ venv ปัจจุบันของคุณ ฉันใช้วิธีนี้เป็นวิธีที่รวดเร็วและสกปรกในการคัดลอกและย้าย envs เสมือน python3 พร้อมกับติดตั้งแพ็คเกจ pip จำนวนมาก
Paul Whipp

1
@PaulWhipp มีประโยชน์ในการใช้คำสั่งนั้นกับการใช้เพียงอย่างเดียว--relocatableหรือไม่? นอกจากนี้นาธานคำถามที่ดี แต่คำตอบนี้แย่มาก การยอมรับคำตอบของคุณเองมักจะมีอคติเล็กน้อยเว้นแต่ว่าจะเขียนได้ดีและระบุตัวเลือกอย่างชัดเจน แต่การพิจารณาว่าตัวเองจะเป็นอัตวิสัยอยู่ดี
ดาวอส

1
@Davos - relocatable ไม่ได้ผลสำหรับฉัน แต่ฉันมักจะย้าย python3 venvs โดยการแฮ็กไบนารีและจนถึงตอนนี้ฉันก็ไม่มีปัญหาใด ๆ
Paul Whipp

1
ฉันบอกเป็นนัยว่าคุณควรเปลี่ยนเป็นยอมรับคำตอบอื่น (เช่นไม่ใช่ของคุณ) บางทีอาจเป็นคำตอบที่ผู้คนเลือก: D
ดาวอส

3
คำถามคือ "ฉันขอแค่mvvenv ได้ไหม" และคำตอบคือ "ไม่ได้ง่ายๆmvมีวิธีแก้ปัญหา แต่อาจจะง่ายกว่าในการติดตั้งใหม่" หากนี่เป็นคำตอบอันดับต้น ๆ ก็จะช่วยฉันและคนอื่น ๆ ได้บ้าง
Nickolay

5

ใช่สิ่งนี้จะเป็นไปได้หากคุณยังไม่ได้ทำอะไรที่ขึ้นอยู่กับไดเร็กทอรีปัจจุบันของ Virtualenv

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

เอกสารระบุว่า :

Virtualenv แต่ละตัวมีข้อมูลเส้นทางที่เข้ารหัสไว้ในนั้น

ตัวอย่างเช่นหากคุณรันsetvirtualenvprojectมันจะไม่สามารถสลับไปยังไดเร็กทอรีที่ถูกต้องหลังจากที่คุณเรียกใช้workon ...ดังนั้นในกรณีนี้คุณจะต้องแก้ไขด้วยตนเอง

โดยทั่วไป Virtualenv เป็นมากกว่าไดเร็กทอรีที่มีไฟล์ล่าม Python ที่จำเป็นพร้อมแพ็คเกจที่คุณต้องการ


3

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

หลังจากทำเสร็จแล้วvirtualenv --relocatable yourenvคุณจะต้องเปลี่ยนVIRTUAL_ENVตัวแปรทุกครั้งที่ย้ายไดเร็กทอรีดังนั้นหากคุณไม่ต้องการเปลี่ยนด้วยตนเองให้ใช้สิ่งนี้

#!/bin/bash \n 
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
EXISTING=$(grep 'VIRTUAL_ENV=' bin/activate)  
NEWDIR=VIRTUAL_ENV=\"$DIR\"
sed -i -e "s|$EXISTING|$NEWDIR|" bin/activate
source bin/activate

ฉันหวังว่ามันจะช่วยได้


1

ใช่คุณสามารถ! (ในwindows)

วิธีแก้ปัญหานั้นง่ายเพียงแค่ย้ายสภาพแวดล้อมเสมือนของคุณไปที่ใดก็ได้จากนั้นแก้ไขactivate.batภายในscripts\:

  1. ย้ายไปยังสภาพแวดล้อมเสมือนไปยังไดเร็กทอรีที่ต้องการ

  2. คลิกขวาและแก้ไขอยู่ที่activate.batvenv_folder\scripts

  3. เปลี่ยนVIRTUAL_ENVตัวแปรจาก:

     set VIRTUAL_ENV=C:\old_directory\venv_name
    

    เป็น

     set VIRTUAL_ENV=C:\new_directory\venv_name
    
  4. บันทึกไฟล์แบตช์ที่แก้ไขและนั่นก็คือมัน!

หมายเหตุ: โซลูชันของฉันควรใช้งานได้และบันทึกwindows usersการตั้งค่าสภาพแวดล้อมเสมือนใหม่ฉันสงสัยว่าสิ่งนี้จะใช้ได้กับระบบปฏิบัติการอื่นเนื่องจากมา.batจากMS-DOS


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