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/pathke~/.bashrcatau/etc/bash.bashrc - tambahkan
PYTHONPATHkeDefaults env_keep += "ENV1 ENV2 ..."dalam file sudoers - hapus
Defaults !env_resetdari 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.