Pertanyaan ini bukan duplikat.
Ini berkaitan tidak hanya dengan mengganti nama lingkungan virtual, tetapi untuk benar - benar memindahkannya ke direktori yang berbeda, termasuk, berpotensi, direktori pengguna yang berbeda.
Ini tidak sama dengan hanya mengganti nama lingkungan virtual, terutama untuk orang yang tidak terbiasa dengan virtualenv.
Jika saya membuat virtualenv, dan saya memindahkannya ke folder lain, apakah masih berfungsi?
$ virtualenv -p /usr/bin/python3 /home/me/Env/my-python-venv
$ source Env/my-python-venv/bin/activate
(my-python-venv) $
... kemudian pada hari itu, lingkungan virtual BERGERAK ...
(my-python-venv) $ deactivate
$ mkdir -p /home/me/PeskyPartyPEnvs
$ mv /home/me/Env/my-python-venv /home/me/PeskyPartyPEnvs/
Pertanyaan:
Akankah ini berhasil?
$ source /home/me/PeskyPartyPEnvs/my-python-venv/bin/activate
(my-python-venv) $ /home/me/PeskyPartyPEnvs/my-python-venv/bin/pip3 install foaas
Maksud saya ini bukan pertanyaan tentang kebijaksanaan mencoba ini (kecuali jika kebijaksanaan itu lucu, tentu saja), dan lebih banyak tentang apakah itu mungkin. Saya benar-benar ingin tahu apakah itu mungkin dilakukan dengan Python 3, atau apakah saya hanya perlu menyedotnya dan mengkloningnya.
Dapatkah saya hanya mv
seorang virtualenv
seperti itu tanpa kesedihan? Saya ingin menghindari kesedihan.
sumber
Scripts
dir (setara denganbin
on * nix) dan mengatakan sesuatu sepertiactivate.ps1 cannot be made relative (it's not a normal script that starts with #!c:\..python.exe.
pada dasarnya mengeluh bahwa hash-bang di file header bukan python.exe virtualenv saat ini, itu yang saya pindahkan dari -mudah diperbaiki. Saya melihat di skrip mewah itu dan toh sudah menemukan jalannya sendiri - bagus. Beberapa skrip lain juga tidak bergantung pada jalur (mis. Deactivate.bat) jadi singkatnya, ini berfungsi.activate.ps1 cannot be made relative
dapat diabaikan karena skrip tersebut sudah relatif. Pesan tersebut tidak membantu di Windows, karena skrip tidak menggunakan#!
arahan seperti di Linux untuk memberi tahu shell aplikasi mana yang harus menjalankannya. Tidakactivate.bat
bisa diubah, tetapi tidak digunakan (setidaknya di windows 10, memanggilactivate
meluncurkan skrip PoSH) jadi tidak, saya tidak perlu mengedit skrip apa pun. Masalahnya adalahpip.exe
mana yang memiliki jalur ke kode keras python dan perlu diedit dengan hex-editor, atau hanya menginstal ulang.pip freeze
ke file persyaratan sehingga Anda dapat dengan mudah menginstal ulang semua paket Anda, buruh pelabuhan (bekerja dengan baik dengan virtualenv diinstal di atasnya), conda, pyenv atau beberapa alat lainnya. Anda harus dapat membuat & menghancurkan lingkungan sebagai infrastruktur yang tidak dapat diubah, lingkungan tersebut seharusnya tidak berharga.Untuk Python 3.3+ (dengan baru
venv
modul built-in baru)Jawaban Singkat (terlepas dari versinya):
Jawaban panjang:
Pada Python v3.3,
virtualenv
telah menjadi modul built-in bernamavenv
.The
--relocatable
pilihan yang disebutkan dalam jawaban lainnya belum termasuk dalamvenv
, dan saat ini tidak ada yang baik, cara yang aman bahwa aku sadar baik mengubah nama atau pindah lingkungan virtual Python.Namun, ada cara yang cukup sederhana untuk membuat ulang lingkungan virtual, dengan semua paket yang terinstal saat ini. Lihat jawaban ini , atau lihat bagian di bawah ini untuk informasi tentang membuat ulang lingkungan virtual. Selama proses tersebut, Anda dapat menciptakan kembali lingkungan baru di lokasi mana pun dan dengan nama apa pun yang Anda inginkan. Atau lihat bagian di bawah ini untuk prosesnya.
Dalam jawaban itu, dia menyebutkan beberapa paket pihak ke-3 lainnya yang mungkin mendukung penggantian nama atau pemindahan langsung. Jika Anda memutuskan untuk mengejar cara untuk memindahkan lingkungan virtual secara utuh, Anda dapat melihat apakah itu juga berfungsi
venv
.Catatan: Dalam jawaban itu, ini difokuskan pada
virtualenv
, bukanvenv
. Lihat di bawah untuk mengetahui cara menerjemahkan.venv
vs. lebih tuavirtualenv
sintaks perintah yangPerintah yang digunakan
venv
adalah:bukan hanya
virtualenv
, yang menginstal sebagai perintah dalam paket aslinya. Di mana "python" mengacu pada bagaimana pun Anda menjalankan python Anda yang dapat dieksekusi, yang dapat berupa berbagai hal, seperti:python
py
ataupy -3.7
atau serupa ( Peluncur Python untuk Windows untuk Python 3.3+ dan hanya untuk Windows saat ini)python3
(konvensi untuk lingkungan linux yang menginstal ganda python 2 dan 3)c:\program files\python37\python.exe
Jika Anda tidak yakin versi mana yang sedang dijalankan, Anda selalu
python --version
dapat mencari tahu.Cara membuat ulang lingkungan virtual
Membuat / membuat ulang lingkungan virtual itu mudah dan harus menjadi kebiasaan setelah Anda bekerja dengannya sebentar. Proses ini mencerminkan apa yang akan Anda lakukan untuk mendistribusikan skrip Anda sebagai paket (dengan dependensinya) di paruh pertama, dan kemudian apa yang akan dilakukan seseorang untuk menginstal skrip / paket Anda untuk pengembangan lebih lanjut.
Pertama, dapatkan daftar terbaru dari apa yang ada di lingkungan virtual. Dengan itu aktif, dapatkan versi Python yang digunakannya dan simpan daftar dependensi ke file.
Gunakan
python --version
dengan lingkungan virtual yang diaktifkan untuk melihat versi Python yang digunakannya.Gunakan
python -m pip freeze > requirements.txt
untuk membuat daftar dependensi paket saat ini dan memasukkannya ke dalamrequirements.txt
file. Perintah ini pasti berfungsi di Linux atau Git Bash - tidak 100% yakin tentang Powershell atau Command Line di Windows.Sekarang buat lingkungan virtual baru dan tambahkan dependensi dari yang lama.
Jadikan tempat baru Anda.
python
sebagai perintahpython.exe
di folder lingkungan virtualpython -m venv my_new_venv
untuk membuat lingkungan virtual baru di direktori kerja saat ini dimy_new_venv
folder baru .Instal dependensi Anda dari
requirements.txt
file.python -m pip install -r requirements.txt
Anda mungkin perlu menginstal ulang paket lokal yang ada dalam mode pengembangan.
Catatan, jika Anda perlu melihat lokasi spesifik tempat paket diinstal, gunakan:
python -m pip list -v
-v
atau "verbose" akan menambahkan beberapa informasi tambahan tentang setiap paket yang diinstal, termasuk jalur penginstalannya. Ini berguna untuk memastikan Anda menjaga paket virtual, pengguna, dan sistem yang terinstal tetap lurus.Pada titik ini Anda bisa menghapus folder venv lama dan semua isinya. Saya merekomendasikan menggunakan GUI untuk itu - penghapusan file seringkali permanen dari baris perintah linux, dan kesalahan ketik kecil bisa menjadi berita buruk.
sumber
pip wheel . -w wheels
dan kemudian menginstal ulang paket di lingkungan virtual baru denganpip install --no-index --find-links /path/to/wheels/ -r requirements.txt
The
--relocatable
argumen untukvirtualenv
muncul untuk memungkinkan Anda untuk melakukan hal ini.sumber
virtualenv --relocatable my-python-venv
SETELAH lingkungan sudah ada.--help
:This fixes up scripts and makes all .pth files relative
. Tidak, itu tidak akan membuat perpustakaan platform independen. Jika Anda ingin memindahkannya ke platform lain, Anda harus menginstalnya kembali berdasarkan python lokal.TAPI ALAS:
Tidak, Anda tidak bisa begitu saja
mv
. Ada beberapa solusi, tetapi mungkin lebih mudah untuk menginstal ulang.(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 $
... menekan
enter
banyak karena frustrasi, dan berikut ini berhasilKecuali itu bukan dari
my-python-venv
, ergo kesedihan.Ingin
mv
Andavirtualenv
dan menggunakannya, jika tidak diubah?Jawaban singkat:
Ya tidak bisa .
sumber
find bin -type f -exec ex -sc "%s,${FROM},${PWD},g|x" {} \;
mengasumsikan bin dan lib Anda ada di folder venv Anda saat ini. Saya menggunakan ini sebagai cara cepat dan kotor untuk menyalin dan memindahkan python3 virtual envs dengan banyak paket pip terpasang.--relocatable
? Juga, Nathan, pertanyaan yang bagus tapi ini jawaban yang buruk. Menerima jawaban Anda sendiri selalu sedikit bias, kecuali jika ditulis dengan baik dan dengan jelas menyebutkan pilihannya, tetapi menentukan bahwa diri Anda tetap subjektif.mv
sebuah venv?", Dan jawabannya adalah "tidak, Anda tidak bisa begitu sajamv
, ada beberapa solusi tetapi mungkin lebih mudah untuk menginstal ulang". Jika ini adalah jawaban teratas, itu akan menghemat waktu saya dan orang lain.Ya, ini dapat dilakukan jika Anda belum melakukan apa pun yang bergantung pada direktori virtualenv saat ini.
Namun, jika Anda punya pilihan, hal terbaik yang harus dilakukan adalah membuat virtualenv baru dan mulai menggunakan virtualenv baru sebagai gantinya. Ini adalah pilihan teraman dan paling tidak menyebabkan masalah nantinya.
Dokumentasi tersebut menyebutkan bahwa :
Misalnya, jika Anda telah menjalankannya
setvirtualenvproject
maka itu tidak akan dapat beralih ke direktori yang benar setelah Anda menjalankannyaworkon ...
sehingga Anda harus memperbaikinya secara manual.Secara umum virtualenv tidak lebih dari sebuah direktori dengan file interpreter Python yang diperlukan ditambah paket yang Anda butuhkan.
sumber
Menggunakan jawaban dari utas ini dan utas lainnya tentang topik serupa, saya telah membuat skrip bash yang, terletak dan dijalankan dalam direktori virtualenv itu sendiri , akan membantu gerakan virtualenv Anda.
Setelah melakukannya,
virtualenv --relocatable yourenv
Anda harus mengubahVIRTUAL_ENV
variabel setiap kali Anda memindahkan direktori, jadi jika Anda tidak ingin mengubahnya secara manual, gunakan ini.#!/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
Saya harap ini membantu.
sumber
YA KAMU BISA! (Dalam
windows
)Solusinya mudah, cukup pindahkan lingkungan virtual Anda ke mana saja lalu edit
activate.bat
di dalamscripts\
:Pindah ke lingkungan virtual ke direktori yang diinginkan
Klik kanan dan edit yang
activate.bat
terletak divenv_folder\scripts
.Ubah
VIRTUAL_ENV
variabel dari:set VIRTUAL_ENV=C:\old_directory\venv_name
ke
set VIRTUAL_ENV=C:\new_directory\venv_name
Simpan file batch yang telah diedit, dan selesai!
CATATAN: Solusi saya harus berfungsi dan menyimpan
windows users
pengaturan lingkungan virtual baru, saya ragu ini akan berfungsi di sistem operasi lain karena.bat
dariMS-DOS
sumber
old_directory
keold_directory
- apakah itu salah ketik?