Bagaimana Anda menyetel pythonpath di virtualenv yang sudah dibuat?

106

File apa yang saya edit, dan bagaimana caranya? Saya menciptakan lingkungan virtual.

TIMEX
sumber
periksa apakah itu menunjuk ke direktori yang benar. Jika Anda belum memilikinya, klik tombol New dan buatlah.
11
Gunakan perintah add2virtualenv .
s29
5
add2virtualenv adalah sebuah virtualenvwrapperperintah. Ini bukan bagian dari virtualenv.
kojiro

Jawaban:

124

EDIT # 2

Jawaban yang benar adalah jawaban @ arogachev .


Jika Anda ingin mengubah yang PYTHONPATHdigunakan di virtualenv, Anda dapat menambahkan baris berikut ke bin/activatefile virtualenv Anda :

export PYTHONPATH="/the/path/you/want"

Dengan cara ini, yang baru PYTHONPATHakan disetel setiap kali Anda menggunakan virtualenv ini.

EDIT: (untuk menjawab komentar @ RamRachum)

Untuk mengembalikannya ke nilai aslinya deactivate, Anda dapat menambahkan

export OLD_PYTHONPATH="$PYTHONPATH"

sebelum baris yang disebutkan sebelumnya, dan tambahkan baris berikut ke bin/postdeactivateskrip Anda .

export PYTHONPATH="$OLD_PYTHONPATH"
mdeous
sumber
1
Apakah itu juga akan dihapus deactivate?
Ram Rachum
1
Jadi ini berarti bahwa lingkungan virtual yang baru dibuat memiliki default PYTHONPATH(global) dan bukan jalur lokal virtualenv?
ducin
6
Ini bekerja dengan sangat baik untuk saya, saya tidak menggunakan virtualenvwrapper. Satu-satunya catatan adalah bahwa saya tidak memiliki skrip bin / postdeactivate seperti itu, kemudian aktifkan memiliki fungsi nonaktifkan. Baris kode dengan demikian harus diletakkan di sana, berhati-hatilah untuk membungkusnya dalam pernyataan if sebagai operasi lainnya dalam fungsi tersebut.
Niccolò
2
Tampaknya aneh bahwa virtualenv tidak melakukan ini secara default.
Seth
2
Sunting # 2 adalah kebohongan! :) Jawaban yang benar adalah jawaban @ arjen-p-de-vries
Berriel
73

Komentar oleh @ s29 harus menjadi jawaban:

Salah satu cara untuk menambahkan direktori ke lingkungan virtual adalah dengan menginstal virtualenvwrapper (yang berguna untuk banyak hal) dan kemudian lakukan

mkvirtualenv myenv
workon myenv
add2virtualenv . #for current directory
add2virtualenv ~/my/path

Jika Anda ingin menghapus jalur ini, edit file myenvhomedir/lib/python2.7/site-packages/_virtualenv_path_extensions.pth

Dokumentasi tentang virtualenvwrapper dapat ditemukan di http://virtualenvwrapper.readthedocs.org/en/latest/

Dokumentasi khusus tentang fitur ini dapat ditemukan di http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html?highlight=add2virtualenv

tjb
sumber
6
untuk menghapus:add2virtualenv -d
Pidato
1
baru saja menghubungkan jawaban ini dengan jawaban saya, karena ini jauh lebih baik
mdeous
27

Anda dapat membuat .pthfile yang berisi direktori yang akan dicari, dan meletakkannya di site-packagesdirektori. Misalnya:

cd $(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
echo /some/library/path > some-library.pth

Efeknya sama dengan menambahkan /some/library/pathke sys.path, dan tetap lokal untuk virtualenvpenyiapan.

Arjen P. De Vries
sumber
7
Saya sangat menyukai pendekatan ini; hampir tidak berubah-ubah seperti menambahkan garis untuk mengaktifkan / menonaktifkan dan tidak memerlukan penggunaan virtualenvwrapper. Jika Anda lebih suka tidak memanggil python untuk menemukan direktori paket situs, itu berada di jalur yang cukup dapat diprediksi $VIRTUALENV_ROOT/lib/pythonX.Y/site-packages. Docs on .pth files: docs.python.org/3.6/library/site.html
Alec
2
Saya tidak ingin mengetikkan jalur absolut, karena ruang kerja saya berpindah-pindah di sekitar sistem file saya. Dan, jalur proyek saya memiliki ruang. Jadi, saya mengetik perintah yang sedikit dimodifikasi: pushd "$(venv/bin/python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")" ...path/to/project/venv/lib/python3.7/site-packages ...path/to/project echo ../../../../src > my_project.pth popdKemudian saya menonaktifkan virtualenv saya, dan mengaktifkan kembali. Sekarang saya dapat menjalankan kode proyek yang memerlukan mengetahui di mana direktori proyek saya berada.
Jim DeLaHunt
4
Ini jawaban yang benar. Mengubah skrip yang disediakan vendor ( /bin/activate) adalah malapraktik dan menginstal alat pihak ketiga lebih rendah daripada menggunakan cara bawaan untuk mencapai hal yang sama.
Merah
2
  1. Inisialisasi virtualenv Anda
cd venv

source bin/activate
  1. Cukup atur atau ubah jalur python Anda dengan memasukkan perintah berikut:
export PYTHONPATH='/home/django/srmvenv/lib/python3.4'
  1. untuk memeriksa jalur python masuk dengan python:
   python

      \>\> import sys

      \>\> sys.path

Siyaram Malav
sumber
1

Saya memodifikasi skrip pengaktifan saya ke sumber file .virtualenvrc, jika ada di direktori saat ini, dan untuk menyimpan / memulihkan PYTHONPATHsaat mengaktifkan / menonaktifkan.

Anda dapat menemukan activateskrip yang ditambal di sini. . Ini adalah pengganti drop-in untuk skrip pengaktifan yang dibuat oleh virtualenv 1.11.6.

Lalu saya menambahkan sesuatu seperti ini ke saya .virtualenvrc:

export PYTHONPATH="${PYTHONPATH:+$PYTHONPATH:}/some/library/path"
André Laszlo
sumber
-20

Ini sudah dijawab di sini -> Apakah lingkungan virtual saya (python) menyebabkan PYTHONPATH saya rusak?

UNIX / LINUX

Tambahkan "ekspor PYTHONPATH = / usr / local / lib / python2.0" ini ke file ~ / .bashrc dan sumber dengan mengetik "source ~ / .bashrc" OR ". ~ / .Bashrc".

WINDOWS XP

1) Buka panel Kontrol 2) Klik dua kali Sistem 3) Buka tab Lanjutan 4) Klik Variabel Lingkungan

Di jendela Variabel Sistem, periksa apakah Anda memiliki variabel bernama PYTHONPATH. Jika Anda sudah memilikinya, periksa apakah itu mengarah ke direktori yang benar. Jika Anda belum memilikinya, klik tombol New dan buatlah.

KODE PYTHON

Atau, Anda juga dapat melakukan di bawah kode Anda: -

import sys
sys.path.append("/home/me/mypy") 
Ravikiran
sumber
4
-1: Ini membahas PYTHONPATH pengguna, bukan PYTHONPATH virtualenv.
twneale