Saya mulai menggunakan Mac saya untuk menginstal paket Python dengan cara yang sama saya lakukan dengan PC Windows saya di tempat kerja; namun pada Mac saya, saya sering menjumpai kesalahan izin ditolak saat menulis ke file log atau paket situs.
Oleh karena itu saya berpikir untuk berjalan di pip install <package>
bawah sudo
tetapi apakah itu penggunaan sudo yang aman / dapat diterima mengingat saya hanya ingin ini dipasang di bawah akun pengguna saya saat ini?
Contoh pelacakan balik dari kesalahan I / O logfile:
Command /usr/bin/python -c "import setuptools;__file__='/Users/markwalker/build/pycrypto/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /var/folders/tq/hy1fz_4j27v6rstzzw4vymnr0000gp/T/pip-k6f2FU-record/install-record.txt failed with error code 1 in /Users/markwalker/build/pycrypto
Storing complete log in /Users/markwalker/Library/Logs/pip.log
Traceback (most recent call last):
File "/usr/local/bin/pip", line 8, in <module>
load_entry_point('pip==1.1', 'console_scripts', 'pip')()
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/__init__.py", line 116, in main
return command.main(args[1:], options)
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 141, in main
log_fp = open_logfile(log_fn, 'w')
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 168, in open_logfile
log_fp = open(filename, mode)
IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'
Perbarui
Ini mungkin karena izin, namun pendekatan terbaik adalah menggunakan lingkungan virtual untuk proyek python Anda. Berlari sudo pip
harus dihindari kecuali benar-benar diperlukan.
cd /tmp; sudo pip install foo
' adalah solusi yang memadai.Jawaban:
Gunakan lingkungan virtual :
Anda hanya menggunakan
sudo
atau izin yang ditinggikan saat Anda ingin menginstal barang untuk instalasi Python global di seluruh sistem.Cara terbaik adalah menggunakan lingkungan virtual yang mengisolasi paket untuk Anda. Dengan begitu Anda bisa bermain-main tanpa mencemari instalasi python global.
Sebagai bonus, virtualenv tidak membutuhkan izin yang lebih tinggi.
sumber
sudo pip install
. Katakanlah saya perlu menginstal beberapa paket yang akan saya gunakan di banyak proyek atau di tingkat sistem. Seperti beberapa alat CLI sepertipgcli
. Jelas saya tidak membutuhkan virtual env untuk itu, saya ingin menginstalnya secara global. Haruskah saya menggunakansudo pip install
atau ada beberapa praktik yang lebih benar? ITULAH pertanyaannya.Ini tidak aman dan tidak disukai - lihat Apa saja risiko menjalankan 'sudo pip'? Untuk menginstal paket Python di direktori home Anda, Anda tidak memerlukan hak akses root. Lihat deskripsi dari
--user
pilihan untuk pip.sumber
sudo pip install
tidak tahu kerusakan menggunakannya. Bagaimana cara membatalkan perintah ini atau memblokir untuk berjalan di bawahsudo
?Masalah asli Anda adalah pip tidak dapat menulis log ke folder.
Anda perlu cd ke folder di mana proses yang dipanggil dapat menulis seperti
/tmp
acd /tmp
dan memanggil kembali perintah mungkin akan bekerja tetapi bukan yang Anda inginkan.TAPI sebenarnya untuk kasus khusus ini (Anda tidak ingin menggunakan
sudo
untuk menginstal paket python) dan tidak perlu menginstal paket global, Anda dapat menggunakan--user
flag seperti ini:dan itu akan bekerja dengan baik.
Saya berasumsi Anda memiliki instalasi python python satu pengguna dan tidak ingin repot-repot membaca tentang virtualenv (yang sangat tidak ramah pengguna) atau pipenv .
Seperti yang ditunjukkan oleh beberapa orang di bagian komentar, pendekatan selanjutnya bukanlah ide yang bagus kecuali Anda tidak tahu apa yang harus dilakukan dan mengalami kebuntuan:
Pendekatan lain untuk paket global seperti dalam kasus Anda, Anda ingin melakukan sesuatu seperti:
atau lebih umum
sumber
--user
pilihan untuk pip diberikan sebagai solusi dalam jawaban saya yang sudah ada ketika Anda menulis Anda.--user
membantu saya!site-packages
direktori Python mirip dengan "memperbaiki" pompa dengan memukulnya dengan kunci inggris. Ini dilindungi karena suatu alasan - Anda tidak seharusnya memasang barang di sana . The nyata solusi adalah untuk tidak mencampur sistem distribusi Python dengan pemrograman sehari-hari. Instal distribusi Python yang berbeda (dari Python.org, Homebrew, Canopy, dll.).Karena saya memiliki masalah yang sama, saya ingin menekankan bahwa sebenarnya komentar pertama oleh Brian Cain adalah solusi untuk masalah "IOError: [Errno 13]":
Jika dijalankan di direktori temp (
cd /tmp
), IOError tidak terjadi lagi jika saya menjalankansudo pip install foo
.sumber
sudo pip
"solusi" ini dan dengan demikian menginstal paket dengan hak akses root, yang mungkin bukan yang Anda inginkan?/tmp
dalamnya, ini berfungsi, karena setiap orang memiliki akses tulis di sana.Saya mengalami masalah saat menginstal
virtualenvwrapper
setelah berhasil menginstalvirtualenv
.Terminal saya mengeluh setelah saya melakukan ini:
Jadi, saya tidak berhasil mencoba ini
(TIDAK DIANJURKAN):Kemudian, saya berhasil menginstalnya dengan ini:
sumber
Sepertinya izin Anda kacau. Ketik
chown -R markwalker ~
Terminal dan cobapip
lagi? Beri tahu saya jika Anda sudah diurutkan.sumber
chown
memberikanOperation not permitted
banyak direktori tersembunyi seperti.shsh
& saya berasumsi itu bekerja melalui file yang dapat disetel sekarang, tetapi saya akan melihat apa yang terjadi ketika cli prompt kembali.