การติดตั้งแพ็คเกจ pip ไปที่โฟลเดอร์ $ HOME


330

เป็นไปได้ไหม? เมื่อติดตั้งpipให้ติดตั้งแพ็กเกจหลามใน$HOMEโฟลเดอร์ของฉัน (ตัวอย่างเช่นฉันต้องการติดตั้งmercurialใช้pipงาน แต่อยู่ข้างใน$HOMEแทน/usr/local)

ฉันใช้เครื่องแม็คและแค่คิดถึงความเป็นไปได้นี้แทนที่จะ "ทำให้สกปรก" ของ/usr/localฉันฉันจะใช้$HOMEแทน

PEP370เกี่ยวกับสิ่งนี้ เป็นเพียงการสร้าง˜/.localและทำpip install packageเพียงพอที่จะทำให้แพ็คเกจเหล่านี้ติดตั้งเฉพาะที่โฟลเดอร์ $ HOME ของฉันหรือไม่


คุณได้ลอง virtualenv? คุณสามารถติดตั้งแพ็คเกจด้วย pip ในสภาพแวดล้อมที่แยกได้
joet3ch

2
ฉันคิดเกี่ยวกับมัน แต่ฉันต้องการติดตั้งแอปพลิเคชันหลามโดยใช้ python ที่มีอยู่ (2.6.1) แต่แทนที่จะติดตั้งที่ / usr / local /, ติดตั้งที่โฟลเดอร์ $ HOME ของฉันและเพิ่มลงใน $ PATH ฉันต้องการทราบว่าเป็นไปได้และคำเตือนใด ๆ ของวิธีการนี้
ใครบางคนยังคงใช้ MS-DOS ของคุณใน

11
+1 สำหรับการโปรโมต PEP370 นี่เป็นตัวเลือกที่เรียบง่าย แต่มีประโยชน์ที่ผู้คนควรรู้
Ned Deily

ฉันกำลังต่อสู้กับปัญหาที่คล้ายกัน (อาจเกิดจาก pip ที่กำหนดค่าผิดและ easy_install สำหรับ pyhtons ที่แตกต่างกันสองแห่ง) $ python setup.py --user installเป็นรีสอร์ทที่แล้วผมพยายามที่จะใช้ธรรมดา และมันก็ใช้งานได้ แพ็คเกจนี้ได้รับการติดตั้งที่บ้านย่อยและใช้งานได้ตามปกติ จะต้องคุยกับผู้ดูแลเซิร์ฟเวอร์ของฉัน
Jan Vlcinsky

1
หากคุณต้องการติดตั้ง PIP เพียงทำสิ่งที่ชอบwget https://bootstrap.pypa.io/get-pip.pyแล้วตามด้วยpython get-pip.pyคุณก็พร้อมที่จะไป อาจมีประโยชน์หากคุณอยู่ในเครื่องที่ PIP ที่ติดตั้งเก่าเกินไป (เป็นกรณีของฉัน) ดูpip.readthedocs.org/en/latest/installing.htmlสำหรับข้อมูลเพิ่มเติม
Markus

คำตอบ:


463

ในขณะที่คุณสามารถใช้ a virtualenvคุณไม่จำเป็นต้อง เคล็ดลับกำลังส่งผ่าน--userอาร์กิวเมนต์PEP370 ไปยังsetup.pyสคริปต์ ด้วยเวอร์ชันล่าสุดpipวิธีหนึ่งคือ:

pip install --user mercurial

นี้จะส่งผลให้ในhgสคริปต์ถูกติดตั้งใน$HOME/.local/bin/hgและส่วนที่เหลือของแพคเกจ hg $HOME/.local/lib/pythonx.y/site-packages/ใน

โปรดทราบว่าข้างต้นเป็นจริงสำหรับ Python 2.6 มีการถกเถียงกันเล็กน้อยในหมู่นักพัฒนา Python เกี่ยวกับตำแหน่งของไดเรกทอรีที่เหมาะสมบน Mac OS X สำหรับการuserติดตั้งแบบ PEP370 ในหลาม 2.7 และ 3.2 สถานที่ตั้งบน Mac OS X ก็เปลี่ยนจากการ$HOME/.local $HOME/Library/Pythonสิ่งนี้อาจเปลี่ยนแปลงในรีลีสในอนาคต แต่สำหรับขณะนี้ที่ 2.7 (3.2 และหากhgได้รับการสนับสนุนในหลาม 3) สถานที่ดังกล่าวข้างต้นจะเป็นและ$HOME/Library/Python/x.y/bin/hg$HOME/Library/Python/x.y/lib/python/site-packages


จุดดี. น่าเสียดายที่มีข้อบกพร่องใน Python 2.7 ที่ทำให้ PYTHONUSERBASE ถูกละเว้นสำหรับการสร้างเฟรมเวิร์ก OS X มันจะได้รับการแก้ไขสำหรับ Python 2.7.3
Ned Deily

1
มันดูน่ากลัวมาก easy_installมาติดตั้งใน Mac OS X โดยค่าเริ่มต้นดังนั้นฉันจะมีเพียงจุดเล็ก ๆ ที่ติดตั้งอยู่นอก$HOMEโฟลเดอร์
บางคนยังใช้ MS-DOS ของคุณ

1
ฉันพยายามเปลี่ยน PYTHONUSERBASE ไปยังตำแหน่งอื่น ไม่สำเร็จ สิ่งนี้ทำบน Windows โดยเฉพาะได้อย่างไร
Snerd

2
ระวังว่าถ้าคุณทำเช่นนี้แล้วลองใช้สภาพแวดล้อม conda ไฟล์ที่ติดตั้งใน.localจะถูกตีก่อนเสมอซึ่งอาจทำให้ยากที่จะติดตามข้อผิดพลาดในการนำเข้า
tacaswell

12
โปรดทราบว่าใน OSX โฟลเดอร์ bin ของไดเรกทอรีผู้ใช้ไม่ได้อยู่ใน PATH export PATH=$PATH:~/Library/Python/X.Y/bin/ซึ่งหมายความว่าสคริปต์ติดตั้งโดยแพคเกจในไดเรกทอรีเว็บไซต์ที่ใช้จะไม่สามารถปฏิบัติการได้จนกว่าคุณจะ
André Caron

21

ฉันจะใช้ virtualenv ที่ไดเรกทอรี HOME ของคุณ

$ sudo easy_install -U virtualenv
$ cd ~
$ virtualenv .
$ bin/pip ...

จากนั้นคุณสามารถแก้ไข~/.(login|profile|bash_profile)ได้ว่าเชลล์ใดที่เหมาะสมในการเพิ่ม ~ / bin ลงใน PATH ของคุณจากนั้นpip|python|easy_installจะเป็นค่าเริ่มต้นที่ใช้


9
"พฤตินัย"วิธีที่จะทำเช่นนี้คือ,virtualenv venv source venv/bin/activateคุณอาจไม่ต้องการใช้ virtualenv ของคุณเสมอไปและด้วยการใช้วิธีนี้พรอมต์ของคุณจะขึ้นต้นด้วย(venv)เมื่อคุณใช้งาน
nyuszika7h

2
@ nyuszika7h เรารู้วิธีใช้ virtualenv แต่นี่เป็นคำตอบของคำถามและเป็นทางออกที่ดีมาก
itsafire

8
@itsafire ใครคือ "เรา" ฉันแนะนำให้คุณอ่านen.wikipedia.org/wiki/Weasel_word
nyuszika7h

3
อย่างไรก็ตามฉันไม่เห็นด้วยนี่ไม่ใช่ "ทางออกที่ดี" มันแฮ็คไร้จุดหมาย
nyuszika7h

19

คุณสามารถระบุ-tตัวเลือก ( --target) เพื่อระบุไดเรกทอรีปลายทาง ดูpip install --helpข้อมูลรายละเอียด นี่คือคำสั่งที่คุณต้องการ:

pip install -t path_to_your_home package-name

ตัวอย่างเช่นสำหรับการติดตั้ง say mxnet ใน$HOMEไดเรกทอรีของฉันฉันพิมพ์:

pip install -t /home/foivos/ mxnet

distutils.errors.DistutilsOptionError: can't combine user with prefix, exec_prefix/home, or install_(plat)baseรับข้อผิดพลาด มันหมายความว่าอะไร?
Anthony Kong

ตรวจสอบgithub.com/pypa/pip/issues/3826สำหรับการสนทนาที่เกี่ยวข้อง ฉันไม่รู้อะไรเพิ่มเติมเกี่ยวกับสิ่งนี้ แต่ฉันไม่เคยพบปัญหาในสภาพแวดล้อมของฉัน
Foivos
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.