OSX El Capitan: sudo pip install OSError: [Errno: 1] Operasi tidak diizinkan


127

Ketika saya menjalankan:

sudo pip install ipython

Saya mendapatkan kesalahan berikut

OSError: [Errno: 1] Operasi tidak diizinkan: '/System/Library/Frameworks/Python.framework/Versions/2.7/share'

Perintah terakhir yang dijalankan mencoba membuat direktori yang diberikan di atas.

Juga, perintah berikut gagal menginstal iPython tanpa memberikan kesalahan.

sudo pip install --user python

(Saya menggunakan Mac OS X El Capitan untuk berjaga-jaga jika orang lain di OS ini melihat masalah yang sama.)



Saya telah menambahkan jawaban yang menjelaskan cara memodifikasi Anda $PATHsehingga Anda dapat memanggil file executable untuk paket --user yang diinstal. stackoverflow.com/a/47102398/117471
Bruno Bronosky

2
Anda tidak harus menggunakan sudodengan --user. Apa --useryang diinstal adalah ~/Librarydaripada /LibraryAnda tidak harus menggunakan sudountuk menginstal di sana. Tetapi begitu Anda menginstal sudo, direktori dan file semua dimiliki oleh root. Maka Anda harus menggunakan sudountuk melakukan hal lain kepada mereka. Yang pada gilirannya akan mengharuskan Anda untuk menggunakan sudohal-hal lain yang seharusnya tidak Anda gunakan. Kemudian bahkan kesalahan yang jujur ​​bisa berubah dari melempar kesalahan, ke menghancurkan data.
Bruno Bronosky

Jawaban:


205

Mengatakan instruksi sudo pip installpada dasarnya salah.

Jika ada tutorial di luar sana yang mengatakan Anda harus melakukannya, sudo pipsilakan ajukan bug pada paket ini. Pengarangnya tidak mendidik komunitas Python, karena waktu telah terbukti sudo pipsebagai praktik yang rusak.

OSX El Capitan memperkenalkan mekanisme untuk mencegah kerusakan file sistem operasi . /System/Library/Frameworks/Python.framework/Versions/2.7/shareadalah salah satu lokasi yang dilindungi. Seorang pengguna biasa tidak memiliki alasan untuk meletakkan atau menulis file apa pun di sana . Ini karena sistem operasi itu sendiri bergantung pada file-file ini dan sudo pip, dengan semua kekuatan yang diberikan dari atas, tanpa syarat akan menimpa mereka. Biasanya hal-hal buruk tidak akan terjadi, tetapi kemungkinan ada di sana. Apple ingin melindungi pengguna OS mereka agar tidak sengaja merusak pemasangan mereka.

Sebagai gantinya, Anda perlu menginstal paket Python, seperti IPython, secara lokal ke folder home pengguna Anda . Cara termudah adalah dengan membuat lingkungan virtual , mengaktifkannya dan kemudian menjalankan pip di lingkungan virtual.

Contoh:

cd ~  # Go to home directory
virtualenv my-venv
source my-venv/bin/activate
pip install IPython

Info lebih lanjut

Atau, seseorang harus dapat melakukannya pip install --user. Tetapi sekali lagi, tidak perlu sudo dan Anda perlu secara manual mengatur PATHvariabel lingkungan.


5
Jika tidak ada virtualenv yang diinginkan dan Anda ingin menginstal modul secara global (misalnya / Libraryeasy_install
Phy

3
Apakah Anda memiliki kutipan untuk perspektif ini tentang 'sudo pip' menjadi buruk ("karena waktu telah membuktikan sudo pip sebagai praktik yang rusak")? Saya tidak melihat diskusi tentang sudo dalam kutipan yang Anda berikan dan tutorial mencantumkan langkah pertama untuk membuat virtualenv sebagai 'pip install virtualenv' yang tampaknya menciptakan ketergantungan melingkar yang mencoba mengikuti saran Anda.
Von

1
@Von: pip install virtualenvseharusnya tidak lagi diperlukan untuk Python 3.4+, karena mereka datang dengan python -m venvvirtualenv bawaan bawaan . docs.python.org/3/library/venv.html
Mikko Ohtamaa

29
Dengan segala hormat, itu tidak menjawab pertanyaan awal. Saya mencoba untuk menginstal IPython dan membuatnya tersedia secara global (untuk semua pengguna di komputer saya), dan bukan virtualenv atau pip install --user IPythonmembantu dengan itu. Selain itu, pip install --user IPythongagal menempatkan ipythonperintah di $PATH(setidaknya di mesin saya).
jpetazzo

3
Anda mengajari saya dan juga menghemat waktu saya. Terima kasih banyak, saya berhenti menggunakan sudo dan semuanya berhasil! Jawaban yang bagus
Parth Gupta

24

Saya memiliki masalah yang sama, tetapi menggunakan easy_install "module"memecahkan masalah untuk saya.

Saya tidak yakin mengapa, tetapi pip dan easy_install menggunakan lokasi pemasangan berbeda, dan easy_install memilih yang tepat.

Sunting: tanpa memeriksa ulang tetapi karena komentar; tampaknya instalasi yang berbeda (OSX dan buatan-biringan) saling mengganggu satu sama lain itulah sebabnya alat-alat yang mereka sebutkan memang menunjuk ke lokasi yang berbeda (karena mereka milik instalasi yang berbeda). Saya mengerti bahwa biasanya alat-alat itu dari satu titik instal ke folder yang sama.


Apakah Anda memiliki dua interpreter Python yang berbeda diinstal dan easy_installdikonfigurasi untuk yang lain?
Mikko Ohtamaa

Saya punya 2-3 versi python yang berbeda diinstal, tapi aku punya easy_installuntuk mereka semua: easy_install-2.6, easy_install-2.7,easy_install-3.5
smat88dd

Kemungkinan besar pipdan easy_installarahkan ke Python yang berbeda. Anda dapat mencari tahu ini dengan whichperintah UNIX kemudian mencari tahu pipperintah yang tepat untuk digunakan.
Mikko Ohtamaa 6-15

1
Mungkin sebelum menginstal dari OSX lama sebelum meningkatkan?
Mikko Ohtamaa 6-15

1
pip dan easy_install menggunakan lokasi instalasi berbeda - tidak, mereka menggunakan lokasi yang sama persis. Ini bekerja secara tidak sengaja ketika @MikkoOhtamaa berusaha untuk menunjukkan Anda dalam komentarnya. Ini jelas bukan jawaban.
Piotr Dobrogost

19

Anda harus menginstal ulang Python:

brew reinstall python

Untuk mendapatkan brew, lihat beranda brew .


Saya kedua. saya jalankan brew install pythonmaka saya pikir pipsudah di tempat. Setelah itu pipinstal berhasil (saya punya masalah yang serupa dengan izin / izin perpajakan)
travelingbones


11

Digunakan pip3 install <package>sebagai gantinya dan memecahkan masalah izin dengan pip.


10
FYI, ini berhasil karena pip3menggunakan Python 3, yang biasanya diinstal oleh pengguna. Python 2 (2.7), di sisi lain, dikirimkan bersama macOS, dan dilindungi seperti dijelaskan oleh jawaban berperingkat teratas.
Khanh Nguyen

10

TL; DR $ PATH fix

  1. Gunakan pip install --user package_nameuntuk menginstal paket yang harus menyertakan executable CLI.
  2. Luncurkan shell python dan import package_name
  3. Temukan di mana lib/python/...terjadi di output dan ganti semuanya denganbin
  4. Sepertinya begitu $HOME/Library/Python/2.7/bin

Detail

Karena Perlindungan Integritas Sistem yang baru di macOS 10.11 El Capitan, Anda tidak dapat lagi sudo pip install. Kami tidak akan memperdebatkan manfaat dari itu di sini.

Jawaban lain menjelaskan bahwa Anda seharusnya pip install --useryang benar. Tetapi mereka mengirim Anda ke gang belakang untuk mencari tahu apa yang harus dilakukan tentang Anda $PATHsehingga Anda bisa mendapatkan akses ke executable yang diinstal. Untungnya, saya sudah menyelesaikan kebutuhan serupa untuk pertanyaan yang tidak terkait .

Berikut adalah transkrip tentang bagaimana saya memecahkan masalah pada salah satu sistem saya. Saya memasukkan semuanya, bukan hanya $PATHyang bekerja untuk saya, karena sistem Anda mungkin berbeda dari milik saya. Proses ini harus bekerja untuk semua orang.

$ pip install --user jp
Collecting jp
  Downloading jp-0.2.4.tar.gz
Installing collected packages: jp
  Running setup.py install for jp ... done
Successfully installed jp-0.2.4

$ python -c 'import jp; print jp'
<module 'jp' from '/Users/bbronosky/Library/Python/2.7/lib/python/site-packages/jp/__init__.pyc'>

$ find /Users/bbronosky/Library/Python -type f -perm -100
/Users/bbronosky/Library/Python/2.7/bin/jp

$ which jp

$ echo -e '\n''export PATH=$HOME/Library/Python/2.7/bin:$PATH' >> ~/.bashrc

$ bash # starting a new bash process for demo, but you should open a new terminal

$ which jp
/Users/bbronosky/Library/Python/2.7/bin/jp

$ jp
usage: jp <expression> <filepath>

10

Kesalahan yang sama

Installing collected packages: six, pyparsing, packaging, appdirs, setuptools
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/commands/install.py", line 342, in run
    prefix=options.prefix_path,
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_set.py", line 784, in install
    **kwargs
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_install.py", line 851, in install
    self.move_wheel_files(self.source_dir, root=root, prefix=prefix)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_install.py", line 1064, in move_wheel_files
    isolated=self.isolated,
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/wheel.py", line 345, in move_wheel_files
    clobber(source, lib_dir, True)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/wheel.py", line 323, in clobber
    shutil.copyfile(srcfile, destfile)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 83, in copyfile
    with open(dst, 'wb') as fdst:
IOError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/six.py'

dan di sini saya gunakan --usertanpa sudomenyelesaikan masalah ini

$ pip install --user scikit-image h5py keras pygame
Collecting scikit-image
  Downloading http://mirrors.aliyun.com/pypi/packages/65/69/27a1d55ce8f77c8ac757938707105b1070ff4f2ae47d2dc99461bfae4491/scikit_image-0.13.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (28.1MB)
    100% |████████████████████████████████| 28.1MB 380kB/s
Collecting h5py
  Downloading http://mirrors.aliyun.com/pypi/packages/b7/cc/1c29b0815b12de2c92b5323cad60f724ac8f0e39d0166d0b9dfacbcb70dd/h5py-2.7.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (4.5MB)
    100% |████████████████████████████████| 4.5MB 503kB/s
Requirement already satisfied: keras in /Library/Python/2.7/site-packages
Requirement already satisfied: pygame in /Library/Python/2.7/site-packages
Requirement already satisfied: matplotlib>=1.3.1 in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from scikit-image)
Requirement already satisfied: six>=1.7.3 in /Library/Python/2.7/site-packages (from scikit-image)
Requirement already satisfied: pillow>=2.1.0 in /Library/Python/2.7/site-packages (from scikit-image)
Requirement already satisfied: networkx>=1.8 in /Library/Python/2.7/site-packages (from scikit-image)
Requirement already satisfied: PyWavelets>=0.4.0 in /Library/Python/2.7/site-packages (from scikit-image)
Collecting scipy>=0.17.0 (from scikit-image)
  Downloading http://mirrors.aliyun.com/pypi/packages/72/eb/d398b9f63ee936575edc62520477d6c2353ed013bacd656bd0c8bc1d0fa7/scipy-0.19.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (16.2MB)
    100% |████████████████████████████████| 16.2MB 990kB/s
Requirement already satisfied: numpy>=1.7 in /Library/Python/2.7/site-packages (from h5py)
Requirement already satisfied: theano in /Library/Python/2.7/site-packages (from keras)
Requirement already satisfied: pyyaml in /Library/Python/2.7/site-packages (from keras)
Requirement already satisfied: python-dateutil in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: tornado in /Library/Python/2.7/site-packages (from matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: pyparsing>=1.5.6 in /Users/qiuwei/Library/Python/2.7/lib/python/site-packages (from matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: nose in /Library/Python/2.7/site-packages (from matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: olefile in /Library/Python/2.7/site-packages (from pillow>=2.1.0->scikit-image)
Requirement already satisfied: decorator>=3.4.0 in /Library/Python/2.7/site-packages (from networkx>=1.8->scikit-image)
Requirement already satisfied: singledispatch in /Library/Python/2.7/site-packages (from tornado->matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: certifi in /Library/Python/2.7/site-packages (from tornado->matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: backports_abc>=0.4 in /Library/Python/2.7/site-packages (from tornado->matplotlib>=1.3.1->scikit-image)
Installing collected packages: scipy, scikit-image, h5py
Successfully installed h5py-2.7.0 scikit-image-0.13.0 scipy-0.19.0 

Semoga ini akan membantu seseorang yang mengalami masalah serupa!


3
Anda tidak harus menggunakan sudodengan --user. Apa --useryang diinstal adalah ~/Librarydaripada /LibraryAnda tidak harus menggunakan sudountuk menginstal di sana. Tetapi begitu Anda menginstal sudo, direktori dan file semua dimiliki oleh root. Maka Anda harus menggunakan sudountuk melakukan hal lain kepada mereka. Yang pada gilirannya akan mengharuskan Anda untuk menggunakan sudohal-hal lain yang seharusnya tidak Anda gunakan. Kemudian bahkan kesalahan yang jujur ​​bisa berubah dari melempar kesalahan, ke menghancurkan data.
Bruno Bronosky

9

Saya memiliki masalah yang sama. Seperti yang disebutkan orang lain, jangan jalankan pip install dengan sudo. Lari

brew doctor 

dan perbaiki peringatan dan Anda harus dapat melanjutkan dengan pemasangan pip Anda.


6

Sulit untuk membuat pip bekerja pada El Capitan karena beberapa alasan:

  1. OS X tidak mengatur beberapa variabel distutils dengan benar, jadi pip mencoba untuk menginstal file tambahan di lokasi di bawah /System/Library/. El Capitan memblokir ini, yang merupakan kesalahan yang Anda alami.
  2. OS X mencakup sejumlah paket yang sudah ketinggalan zaman /System/Library/. pip sering ingin memperbarui ini tetapi tidak bisa di El Capitan.
  3. OS X menempatkan /System/Library/lebih tinggi dalam urutan pencarian python daripada /Library/Python/2.7/site-packages(lokasi paket python sistem-lebar), jadi bahkan jika Anda berhasil menginstal versi yang lebih baru dari beberapa paket, yang lama masih dimuat, melanggar beberapa dependensi.

Ada solusi untuk semua ini di https://apple.stackexchange.com/a/223163/143849 . Tetapi Anda mungkin sebaiknya memasang versi Python Anda sendiri melalui installer Python standar, Homebrew atau Anaconda.


4

Saya kira Anda memiliki beberapa konflik dengan paket lain. Bagi saya itu six. Jadi, Anda perlu menggunakan perintah seperti ini:

pip install google-api-python-client --upgrade --ignore-installed six

atau

pip install --ignore-installed six


3
Bagian mana dari jawaban yang diberikan oleh @MikkoOhtamaa yang Anda tidak mengerti bahwa Anda masih menyarankan menggunakan sudo dengan pip ?
Piotr Dobrogost

@PiotrDobrogost, mengapa Anda tidak membaca dengan benar sebelum bertanya. Jawaban saya tentang six.
Ruhul Amin

3
Sekali lagi, bagian mana dari jawaban yang diberikan oleh @MikkoOhtamaa yang Anda tidak mengerti bahwa Anda masih menyarankan menggunakan sudo dengan pip ?
Piotr Dobrogost

1

Saya sepenuhnya setuju dengan Mikko, tetapi jika Anda masih ingin melakukannya, inilah caranya:

  • Mulai ulang dalam mode pemulihan (Tahan cmd + R)
  • Buka terminal dari utilitas
  • Gunakan perintah csrutil disable

6
Ini bisa menjadi saran berbahaya tanpa menjelaskan implikasi penonaktifan Perlindungan Integritas Sistem. Satu pertimbangan adalah harapan bahwa itu tidak akan pernah berfungsi dengan baik lagi jika Anda tidak mengaktifkannya kembali dengan relatif cepat, seperti Windows UAC dan Virtualisasi.
andy magoon

0

Saya telah menginstal python2.7 melalui minuman dan berikut ini memecahkan masalah saya

brew install numpy

Ini menginstal python3, tetapi masih berfungsi dan mengaturnya untuk 2.7 juga.


Bekerja dengan sempurna. Terima kasih!!
NightFury
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.