Kiat lain:
sudo echo $PYTHONPATH:
/home/name/lib/py
Itu tidak akan berhasil. Shell akan mengartikannya seperti ini:
1) perluas $PYTHONPATH dari variabel env misalnya:/usr/lib/python
2) jalankan "sudo echo /usr/lib/python"
Perbaikan dalam kasus saya adalah menghapus Defaults !env_reset
dari sudoer.
Tapi, saya harus menyimpan Defaults env_keep += "PYTHONPATH"
di sudoers.
Saya sebenarnya telah menambahkan Defaults env_reset
(yang mengatur ulang variabel lingkungan), tetapi masih berfungsi karena env_keep
.
Sepertinya env_keep
dan !env_reset
konflik satu sama lain, tapi itu hanya tebakan.
Jadi, seluruh prosesnya:
- tambahkan
export PYTHONPATH=/your/custom/path
ke~/.bashrc
atau/etc/bash.bashrc
- tambahkan
PYTHONPATH
keDefaults env_keep += "ENV1 ENV2 ..."
dalam file sudoers - hapus
Defaults !env_reset
dari file sudoers jika ada
Alternatif untuk memanipulasi PYTHONPATH
:
- virtualenv
- distutils
Hal yang sama berlaku untuk PATH
variabel, itu juga tidak dibawa ke lingkungan pengguna super, meskipun Anda meneruskan bendera pelestarian lingkungan -E
.
Saya menggunakan perintah sudo ini sekarang tanpa modifikasi lain:
sudo -HE env PATH=$PATH PYTHONPATH=$PYTHONPATH ./bin/myscript
Karena ini adalah pendekatan alternatif yang berhasil (untuk saya), saya pikir saya akan membagikannya di sini.