perintah linux ditemukan tetapi tidak ditemukan ketika menggunakan sudo

11

Saya mencoba menjalankan instalasi python3 seperti ini:

pip3 install django

Saya mendapatkan kesalahan:

PermissionError: [Errno 13] Izin ditolak: '/usr/local/lib/python3.6/site-packages/pytz'

Saya kemudian mencoba:

sudo pip3 install django

Saya mendapatkan kesalahan:

sudo: pip3: perintah tidak ditemukan

Berikut ini bentuk $ PATH saya:

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin

Bagaimana saya bisa mendapatkan akses sudo ke pip3?

petey
sumber

Jawaban:

9

Sudo tidak menggunakan yang sama PATHdengan pengguna Anda saat ini untuk alasan keamanan. Di /etc/sudoerssana ada opsi secure_pathyang menentukan jalur yang digunakan saat menjalankan perintah dengan sudo. Milik saya terlihat seperti ini:

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

Dari halaman sudo:

 secure_path   Path used for every command run from sudo.  If you don't trust the people running sudo to have a sane PATH environment
               variable you may want to use this.  Another use is if you want to have the “root path” be separate from the “user path”.
               Users in the group specified by the exempt_group option are not affected by secure_path.  This option is not set by
               default.

The pip3perintah mungkin tidak di jalur didefinisikan oleh sudoersberkas. Anda bisa menambahkan path ke secure_pathatau menyediakan path lengkap ke pip3perintah seperti ini:

sudo /path/to/pip3 install django
EvilTorbalan
sumber
1

Mungkin saja sudo tidak melindungi variabel $ PATH Anda saat digunakan. Coba gunakan path lengkap ke biner pip3 dalam perintah, misalnya: sudo /path/to/pip3 install django. Jika Anda tidak yakin dengan path lengkap, lakukan which pip3.

Safado
sumber
yang keluaran pip3: / usr / local / bin / pip3. Variabel $ PATH juga terlihat bagus: /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2- user / bin
petey
apakah sudo echo $PATHmenghasilkan sesuatu yang berbeda? Apakah Anda mencoba perintah dengan path lengkap ke pip3? Adakah perbedaan hasil?
Safado
sudo menampilkan hal yang sama: /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin
petey
0

Anda selalu dapat melakukan:

sudo env "PATH=$PATH" pip3 install django

Seperti yang disebutkan dalam jawaban ini .

Alexander Tolkachev
sumber
0

Saya mengeluarkan django install dengan cara ini:

pip3 install --user django

Ini memperbaiki masalah.

petey
sumber