OSX El Capitan: sudo pip ติดตั้ง OSError: [Errno: 1] ไม่อนุญาตให้ดำเนินการ


127

เมื่อฉันวิ่ง:

sudo pip install ipython

ฉันได้รับข้อผิดพลาดต่อไปนี้

OSError: [Errno: 1] ไม่อนุญาตให้ดำเนินการ: '/System/Library/Frameworks/Python.framework/Versions/2.7/share'

คำสั่งสุดท้ายที่ดำเนินการพยายามสร้างไดเร็กทอรีที่ระบุไว้ด้านบน

นอกจากนี้คำสั่งต่อไปนี้ไม่สามารถติดตั้ง iPython ได้โดยไม่มีข้อผิดพลาดใด ๆ

sudo pip install --user python

(ฉันใช้ Mac OS X El Capitan ในกรณีที่คนอื่น ๆ ใน OS นี้เห็นปัญหาเดียวกัน)



ฉันได้เพิ่มคำตอบที่อธิบายวิธีแก้ไขของคุณ$PATHเพื่อให้คุณสามารถเรียกใช้ไฟล์ปฏิบัติการสำหรับแพ็คเกจผู้ใช้ที่ติดตั้งได้ stackoverflow.com/a/47102398/117471
Bruno Bronosky

2
คุณไม่ควรใช้sudoกับ--user. อะไรคือสิ่งที่--userติดตั้งใน~/Libraryแทนที่จะ/Libraryคุณไม่ต้องใช้sudoเพื่อติดตั้งที่นั่น แต่เมื่อคุณติดตั้งกับที่ไดเรกทอรีและไฟล์ที่เป็นเจ้าของทั้งหมดsudo rootจากนั้นคุณต้องใช้sudoเพื่อทำสิ่งอื่นใดกับพวกเขา ซึ่งจะทำให้คุณต้องใช้sudoเพื่อสิ่งอื่นที่คุณไม่ควรใช้ จากนั้นแม้แต่ความผิดพลาดโดยสุจริตก็สามารถเปลี่ยนไปจากการโยนความผิดพลาดไปจนถึงการทำลายข้อมูล
Bruno Bronosky

คำตอบ:


205

การบอกคำแนะนำsudo pip installนั้นผิดโดยเนื้อแท้

หากมีบทช่วยสอนใด ๆ ที่ระบุว่าคุณควรทำsudo pipโปรดส่งข้อบกพร่องต่อแพ็คเกจนี้ ผู้เขียนกำลังไม่ให้ความรู้แก่ชุมชน Python เนื่องจากเวลาได้พิสูจน์แล้วว่าsudo pipเป็นการปฏิบัติที่ไม่สมบูรณ์

OSX El Capitan แนะนำกลไกในการป้องกันความเสียหายของไฟล์ระบบปฏิบัติการ /System/Library/Frameworks/Python.framework/Versions/2.7/shareเป็นหนึ่งในสถานที่ที่ได้รับการคุ้มครอง ผู้ใช้ปกติมีเหตุผลที่จะใส่หรือเขียนไฟล์ใด ๆ ไม่มี เนื่องจากระบบปฏิบัติการเองอาศัยไฟล์เหล่านี้และsudo pipด้วยแรงทั้งหมดที่ได้รับจากข้างต้นจะเขียนทับไฟล์เหล่านี้โดยไม่มีเงื่อนไข โดยปกติสิ่งเลวร้ายจะไม่เกิดขึ้น แต่โอกาสนั้นมีอยู่ Apple ต้องการปกป้องผู้ใช้ระบบปฏิบัติการของตนไม่ให้ปิดกั้นการติดตั้งโดยไม่ได้ตั้งใจ

แต่คุณจำเป็นต้องติดตั้งแพคเกจหลามเช่น IPython, ในประเทศไปยังโฟลเดอร์บ้านของผู้ใช้ของคุณ วิธีที่ง่ายที่สุดคือการสร้างสภาพแวดล้อมเสมือนจริง , เปิดใช้งานได้แล้วเรียกpipในสภาพแวดล้อมเสมือนจริง

ตัวอย่าง:

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

ข้อมูลเพิ่มเติม

  • อย่างเป็นทางการหลามกวดวิชาติดตั้งแพคเกจ

  • วิธีการสร้างสภาพแวดล้อมเสมือน

pip install --userอีกทางเลือกหนึ่งควรจะสามารถที่จะทำ แต่อีกครั้งไม่จำเป็นต้องใช้ sudoและคุณต้องตั้งค่าPATHตัวแปรสภาพแวดล้อมด้วยตนเอง


5
หากไม่ต้องการ Virtualenv และคุณต้องการติดตั้งโมดูลทั่วโลก (เช่น /Library/Python/2.7/site-packages) ลองใช้วิธีแก้ปัญหาของฉันด้านล่างโดยใช้easy_install stackoverflow.com/a/33463702/3078330
smat88dd

3
คุณมีการอ้างอิงสำหรับมุมมองนี้เกี่ยวกับ 'sudo pip' ที่ไม่ดี ("เมื่อเวลาผ่านไปพิสูจน์แล้วว่า sudo pip เป็นการปฏิบัติที่ไม่ดี") ฉันไม่เห็นการสนทนาเกี่ยวกับ sudo ในการอ้างอิงที่คุณให้และบทช่วยสอนแสดงขั้นตอนแรกในการสร้าง Virtualenvs เป็น 'pip install Virtualenv' ซึ่งดูเหมือนจะสร้างการพึ่งพาแบบวงกลมโดยพยายามทำตามคำแนะนำของคุณ
ฟอน

1
@Von: pip install virtualenvไม่ควรใช้ Python 3.4+ อีกต่อไปเนื่องจากมาพร้อมกับpython -m venvVirtualenv ในตัวที่เทียบเท่า docs.python.org/3/library/venv.html
Mikko Ohtamaa

29
ด้วยความเคารพทั้งหมดนั่นไม่ได้ตอบคำถามเดิม ฉันกำลังพยายามติดตั้ง IPython และทำให้สามารถใช้งานได้ทั่วโลก (สำหรับผู้ใช้ทุกคนในเครื่องของฉัน) และไม่มีความสามารถหรือpip install --user IPythonความช่วยเหลือใด ๆ ยิ่งไปกว่านั้นpip install --user IPythonล้มเหลวในการวางipythonคำสั่งใน$PATH(อย่างน้อยบนเครื่องของฉัน)
jpetazzo

3
คุณสอนฉันและประหยัดเวลาของฉันด้วย ขอบคุณมากที่ฉันหยุดใช้ sudo และทุกอย่างได้ผล! คำตอบที่ดี
Parth Gupta

24

ฉันมีปัญหาเดียวกัน แต่การใช้การeasy_install "module"แก้ปัญหาสำหรับฉัน

ฉันไม่แน่ใจว่าทำไม แต่ pip และ easy_install ใช้ตำแหน่งการติดตั้งที่แตกต่างกันและ easy_install เลือกตำแหน่งที่ถูกต้อง

แก้ไข: โดยไม่ต้องตรวจสอบซ้ำ แต่เป็นเพราะความคิดเห็น; ดูเหมือนว่าการติดตั้งที่แตกต่างกัน (OSX และการติดตั้งแบบชง) จะรบกวนซึ่งกันและกันซึ่งเป็นสาเหตุที่เครื่องมือที่กล่าวถึงชี้ไปยังตำแหน่งที่แตกต่างกัน (เนื่องจากเป็นของการติดตั้งที่แตกต่างกัน) ฉันเข้าใจว่าโดยปกติแล้วเครื่องมือเหล่านั้นจากจุดติดตั้งหนึ่งไปยังโฟลเดอร์เดียวกัน


คุณได้ติดตั้งตัวแปล Python สองตัวที่แตกต่างกันและได้easy_installรับการกำหนดค่าสำหรับตัวแปลอื่นหรือไม่?
Mikko Ohtamaa

ฉันจะมี 2-3 รุ่นหลามที่แตกต่างกันการติดตั้ง แต่ฉันมีeasy_installสำหรับพวกเขาทั้งหมด: easy_install-2.6, easy_install-2.7,easy_install-3.5
smat88dd

เป็นไปได้มากที่สุดpipและeasy_installชี้ไปที่ Python ที่แตกต่างกัน คุณสามารถหาสิ่งนี้ได้ด้วยwhichคำสั่ง UNIX จากนั้นหาpipคำสั่งที่ถูกต้องเพื่อใช้
Mikko Ohtamaa

1
อาจมีการติดตั้งก่อนจาก OSX เก่าก่อนอัปเกรดหรือไม่
Mikko Ohtamaa

1
pip และ easy_install ใช้ตำแหน่งการติดตั้งที่แตกต่างกัน - ไม่ใช้ตำแหน่งเดียวกัน มันทำงานโดยบังเอิญเนื่องจาก @MikkoOhtamaa พยายามแสดงให้คุณเห็นในความคิดเห็นของเขา นี่คือคำตอบที่ชัดเจน
Piotr Dobrogost

19

คุณควรติดตั้ง Python ใหม่:

brew reinstall python

ที่จะได้รับเบียร์ดูหน้าแรกชง


ฉันที่สอง ฉันวิ่งbrew install pythonแล้วฉันคิดว่าpipอยู่ในสถานที่แล้ว หลังจากที่pipติดตั้งทำงาน (ฉันมีปัญหาที่คล้ายกัน w / สิทธิ์และ Bailing pip ในการติดตั้ง)
travelingbones

15

pip install --ignore-installed six

วิธีนี้จะได้ผลจากนั้นคุณสามารถลองใช้คำสั่งแรกได้

ทางhttp://github.com/pypa/pip/issues/3165


ในกรณีของฉันฉันก็ต้องทำเช่นpip install --ignore-installed setuptoolsกัน
ithos67

2
ไม่สิ่งนี้จะไม่ทำงานเนื่องจากไม่มีสิทธิ์
Piotr Dobrogost

11

ใช้pip3 install <package>แทนและแก้ไขปัญหาการอนุญาตด้วยpip.


10
FYI pip3ใช้งานได้เนื่องจากใช้ Python 3 ซึ่งโดยปกติผู้ใช้จะติดตั้ง ในทางกลับกัน Python 2 (2.7) มาพร้อมกับ macOS และได้รับการปกป้องตามคำตอบยอดนิยมที่อธิบาย
Khanh Nguyen

10

TL; DR $ PATH แก้ไข

  1. ใช้pip install --user package_nameเพื่อติดตั้งแพ็กเกจที่ควรมีไฟล์ปฏิบัติการ CLI
  2. เปิดไพ ธ อนเชลล์และ import package_name
  3. ค้นหาตำแหน่งที่lib/python/...เกิดขึ้นในเอาต์พุตและแทนที่ทั้งหมดด้วยbin
  4. มันน่าจะเป็น $HOME/Library/Python/2.7/bin

รายละเอียด

เนื่องจากการป้องกันความสมบูรณ์ของระบบใหม่ใน macOS 10.11 El Capitan คุณจึงไม่สามารถทำได้อีกต่อไป sudo pip installคุณไม่สามารถ เราจะไม่ถกเถียงถึงข้อดีของที่นี่

คำตอบอื่นอธิบายว่าคุณควรpip install --userถูกต้อง แต่พวกเขาส่งคุณไปที่ตรอกซอกซอยด้านหลังเพื่อหาสิ่งที่ต้องทำเกี่ยวกับของคุณ$PATHเพื่อให้คุณสามารถเข้าถึงไฟล์ปฏิบัติการที่ติดตั้งไว้ได้ โชคดีที่ฉันได้แก้ไขความต้องการที่คล้ายกันสำหรับคำถามที่ไม่เกี่ยวข้องแล้ว

นี่คือการถอดเสียงของวิธีที่ฉันแก้ไขปัญหาในระบบของฉัน ฉันรวมทุกอย่างไว้มากกว่าที่จะใช้ได้ผล$PATHสำหรับฉันเพราะระบบของคุณอาจแตกต่างจากของฉัน กระบวนการนี้ควรใช้ได้กับทุกคน

$ 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

ข้อผิดพลาดเดียวกัน

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'

และที่นี่ฉันใช้--userโดยไม่ต้องsudoแก้ปัญหานี้

$ 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 

หวังว่าจะช่วยให้ผู้ที่พบปัญหาคล้ายกันนี้!


3
คุณไม่ควรใช้sudoกับ--user. อะไรคือสิ่งที่--userติดตั้งใน~/Libraryแทนที่จะ/Libraryคุณไม่ต้องใช้sudoเพื่อติดตั้งที่นั่น แต่เมื่อคุณติดตั้งกับที่ไดเรกทอรีและไฟล์ที่เป็นเจ้าของทั้งหมดsudo rootจากนั้นคุณต้องใช้sudoเพื่อทำสิ่งอื่นใดกับพวกเขา ซึ่งจะทำให้คุณต้องใช้sudoเพื่อสิ่งอื่นที่คุณไม่ควรใช้ จากนั้นแม้แต่ความผิดพลาดโดยสุจริตก็สามารถเปลี่ยนไปจากการโยนความผิดพลาดไปจนถึงการทำลายข้อมูล
Bruno Bronosky

9

ฉันมีปัญหาเดียวกัน ดังที่คนอื่น ๆ กล่าวไว้อย่ารัน pip install ด้วย sudo วิ่ง

brew doctor 

และแก้ไขคำเตือนและคุณควรจะสามารถดำเนินการติดตั้ง pip ได้


6

เป็นเรื่องยากที่จะให้ pip ทำงานกับ El Capitan ด้วยเหตุผลหลายประการ:

  1. OS X ไม่ได้ตั้งค่าตัวแปร distutils บางตัวอย่างถูกต้องดังนั้น pip จึงพยายามติดตั้งไฟล์เสริมในตำแหน่งภาย /System/Library/ . El Capitan บล็อกสิ่งนี้ซึ่งเป็นข้อผิดพลาดที่คุณพบ
  2. OS X มีแพ็กเกจที่ล้าสมัยอยู่ภายใต้ /System/Library/รวมถึงจำนวนของแพคเกจที่ล้าสมัยภายใต้ pip มักต้องการอัพเกรดสิ่งเหล่านี้ แต่ไม่สามารถทำได้บน El Capitan
  3. OS X /System/Library/มีลำดับการค้นหา Python สูงกว่า/Library/Python/2.7/site-packages (ตำแหน่งแพคเกจ python ทั้งระบบ) ดังนั้นแม้ว่าคุณจะจัดการติดตั้งเวอร์ชันที่ใหม่กว่าของบางแพ็กเกจ แต่เวอร์ชันเก่าก็ยังคงได้รับการโหลดซึ่งทำลายการอ้างอิงบางอย่าง

มีการแก้ปัญหาสำหรับสิ่งเหล่านี้ที่มีhttps://apple.stackexchange.com/a/223163/143849 แต่คุณควรติดตั้ง Python เวอร์ชันของคุณเองโดยใช้โปรแกรมติดตั้ง Python มาตรฐาน Homebrew หรือ Anaconda


4

ฉันเดาว่าคุณมีข้อขัดแย้งกับแพ็คเกจอื่น ๆ sixสำหรับฉันมันเป็น ดังนั้นคุณต้องใช้คำสั่งเช่นนี้:

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

หรือ

pip install --ignore-installed six


3
ส่วนไหนของคำตอบที่ @MikkoOhtamaa ที่คุณไม่เข้าใจว่าคุณยังแนะนำให้ใช้sudoกับpip ?
Piotr Dobrogost

@PiotrDobrogost ทำไมคุณไม่อ่านอย่างถูกต้องก่อนที่จะถาม sixคำตอบของฉันคือเกี่ยวกับ
Ruhul Amin

3
อีกครั้งส่วนใดของคำตอบที่ @MikkoOhtamaa ที่คุณไม่เข้าใจว่าคุณยังคงแนะนำให้ใช้sudoกับpip ?
Piotr Dobrogost

1

ฉันเห็นด้วยกับ Mikko อย่างเต็มที่ แต่ถ้าคุณยังต้องการทำต่อไปนี้คือวิธี:

  • รีสตาร์ทในโหมดการกู้คืน (กด cmd + R ค้างไว้)
  • เปิดเทอร์มินัลจากยูทิลิตี้
  • ใช้คำสั่ง csrutil disable

6
นี่อาจเป็นคำแนะนำที่อันตรายโดยไม่ต้องอธิบายถึงผลกระทบของการปิดใช้งานการป้องกันความสมบูรณ์ของระบบ ข้อพิจารณาประการหนึ่งคือความคาดหวังว่าจะไม่ทำงานอย่างถูกต้องอีกครั้งหากคุณไม่เปิดใช้งานใหม่อย่างรวดเร็วเช่นเดียวกับ Windows UAC และ Virtualization
andy magoon

0

ฉันติดตั้ง python2.7 ผ่านทาง brew และสิ่งต่อไปนี้ช่วยแก้ปัญหาของฉันได้

ชงติดตั้ง numpy

มันติดตั้ง python3 แต่ก็ยังใช้งานได้และตั้งค่าเป็น 2.7 เช่นกัน


ทำงานได้อย่างไม่มีที่ติ ขอบคุณ !!
NightFury
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.