Saya ingin mengaktifkan instance virtualenv dari skrip Python.
Saya tahu ini cukup mudah dilakukan, tetapi semua contoh yang saya lihat menggunakannya untuk menjalankan perintah di dalam env dan kemudian menutup subproses.
Saya hanya ingin mengaktifkan virtualenv dan kembali ke shell, dengan cara yang sama seperti bin / activation.
Sesuatu seperti ini:
$me: my-script.py -d env-name
$(env-name)me:
Apakah ini mungkin?
Relevan:
python
virtualenv
h3.
sumber
sumber
subprocess.Popen([venv_python_file, script_file])
?script_file
dari lokasi yang sewenang-wenang, atau harus divirtualenv
direktori?script_file
harus di direktori virtualenv, bisa dimana saja.Solusi paling sederhana untuk menjalankan skrip Anda di bawah interpreter virtualenv adalah dengan mengganti baris shebang default dengan jalur ke interpreter virtualenv Anda seperti di awal skrip:
#!/path/to/project/venv/bin/python
Jadikan skrip dapat dieksekusi:
Jalankan skrip:
Voila!
sumber
Ternyata, ya, masalahnya tidak sederhana, tetapi solusinya adalah.
Pertama saya harus membuat skrip shell untuk membungkus perintah "sumber". Yang mengatakan saya menggunakan "." sebaliknya, karena saya telah membaca bahwa lebih baik menggunakannya daripada sumber untuk skrip Bash.
#!/bin/bash . /path/to/env/bin/activate
Kemudian dari skrip Python saya, saya cukup melakukan ini:
import os os.system('/bin/bash --rcfile /path/to/myscript.sh')
Seluruh trik ada di dalam
--rcfile
argumen.Ketika interpreter Python keluar, ia meninggalkan shell saat ini di lingkungan yang diaktifkan.
Menang!
sumber
os.system('/bin/bash --rcfile path/to/env/activate')
Anda tahu, ketika sebuah instance bash dimulai, dibutuhkan .bashrc sebagai argumen untuk --rcfile. Jadi tentukan saja bahwa rcfile adalah file aktivasi Anda ... Tidak?cat ~/.bashrc env/bin/activate > env/bin/activate2 && /bin/bash --rcfile env/bin/activate2
Untuk menjalankan lingkungan Python lain sesuai dengan dokumentasi resmi Virtualenv , di baris perintah Anda dapat menentukan jalur lengkap ke biner Python yang dapat dieksekusi, hanya itu (tidak perlu mengaktifkan virtualenv sebelumnya):
Hal yang sama berlaku jika Anda ingin menjalankan skrip dari baris perintah dengan virtualenv Anda. Anda tidak perlu mengaktifkannya sebelumnya:
Hal yang sama untuk lingkungan Windows (baik dari baris perintah atau dari skrip):
sumber
Hanya solusi sederhana yang berhasil untuk saya. Saya tidak tahu mengapa Anda membutuhkan skrip Bash yang pada dasarnya melakukan langkah yang tidak berguna (apakah saya salah?)
import os os.system('/bin/bash --rcfile flask/bin/activate')
Yang pada dasarnya melakukan apa yang Anda butuhkan:
[hellsing@silence Foundation]$ python2.7 pythonvenv.py (flask)[hellsing@silence Foundation]$
Kemudian alih-alih menonaktifkan lingkungan virtual, cukup Ctrl+ Datau keluar. Apakah itu solusi yang mungkin atau bukankah itu yang Anda inginkan?
sumber
Lingkungan proses anak hilang pada saat ia tidak ada lagi, dan memindahkan konten lingkungan dari sana ke induk agak rumit.
Anda mungkin perlu menelurkan skrip shell (Anda dapat membuatnya secara dinamis ke / tmp) yang akan menampilkan variabel lingkungan virtualenv ke file, yang kemudian Anda baca dalam proses Python induk dan dimasukkan ke os.environ.
Atau Anda cukup mengurai skrip aktif yang digunakan untuk baris di buka ("bin / aktifkan"), ekstrak secara manual, dan masukkan ke os.environ. Ini rumit, tetapi bukan tidak mungkin.
sumber
Jawaban teratas hanya berfungsi untuk Python 2.x
Untuk Python 3.x, gunakan ini:
activate_this_file = "/path/to/virtualenv/bin/activate_this.py" exec(compile(open(activate_this_file, "rb").read(), activate_this_file, 'exec'), dict(__file__=activate_this_file))
Referensi: Apa alternatif dari execfile di Python 3?
sumber
Anda harus membuat semua file Anda
virtualenv
dalam satu folder, sepertivirt
.Dengan asumsi nama folder virtualenv Anda adalah virt, jika tidak mengubahnya
Salin baris di bawah ini ...
#!/usr/bin/env bash ENV_PATH="$HOME/virt/$1/bin/activate" bash --rcfile $ENV_PATH -i
Buat file skrip shell dan tempel baris di atas ...
Berikan izin yang dapat dieksekusi ke file Anda:
Sekarang ekspor jalur folder khusus itu sehingga Anda dapat menemukannya di baris perintah dengan mengklik tab ...
ekspor PATH = $ PATH: "$ HOME / custom"
Sekarang Anda dapat menggunakannya dari mana saja hanya dengan mengetik perintah di bawah ini ...
Misalkan abc lalu ...
sumber