Cài đặt gói pip vào thư mục $ HOME


330

Có thể không? Khi cài đặt pip, cài đặt các gói python trong $HOMEthư mục của tôi . (ví dụ: tôi muốn cài đặt mercurial, sử dụng pip, nhưng bên trong $HOMEthay vì /usr/local)

Tôi với một máy mac và chỉ nghĩ về khả năng này, thay vì "gây ô nhiễm" cho tôi /usr/local, tôi sẽ sử dụng máy của tôi $HOME.

PEP370 chính xác về điều này. Chỉ cần tạo một ˜/.localvà làm pip install packageđủ để làm cho các gói này chỉ được cài đặt tại thư mục $ HOME của tôi?


Bạn đã kiểm tra virtualenv chưa? Bạn có thể cài đặt các gói với pip trong một môi trường bị cô lập.
joet3ch

2
Tôi đã nghĩ về nó, nhưng tôi muốn cài đặt một số ứng dụng python bằng python hiện có (2.6.1), nhưng thay vì cài đặt tại / usr / local /, hãy cài đặt vào thư mục $ HOME của tôi và thêm nó vào $ PATH. Tôi muốn biết nếu nó có thể, và bất kỳ sự cẩn thận nào của phương pháp này.
Ai đó vẫn sử dụng bạn MS-DOS

11
+1 để quảng bá PEP370. Đây là một tùy chọn đơn giản nhưng hữu ích mà nhiều người nên biết đến.
Ned Deily

Tôi đã chiến đấu với vấn đề tương tự (có thể do pip cấu hình sai và easy_install cho hai pyhton khác nhau). Như là phương sách cuối cùng, tôi đã cố gắng sử dụng đồng bằng $ python setup.py --user install. Va no đa hoạt động. Gói hiện được cài đặt tại nhà con và tất cả các công việc như mong đợi. Sẽ phải nói chuyện với quản trị viên máy chủ của tôi.
Jan Vlcinsky

1
Nếu bạn cần cài đặt PIP, chỉ cần làm một cái gì đó như wget https://bootstrap.pypa.io/get-pip.pytiếp theo python get-pip.pyvà bạn sẽ ổn. Có thể hữu ích nếu bạn đang sử dụng máy mà PIP đã cài đặt quá cũ (là trường hợp của tôi). Xem pip.readthedocs.org/en/latest/installing.html để biết thêm thông tin.
Markus

Câu trả lời:


463

Trong khi bạn có thể sử dụng một virtualenv, bạn không cần. Thủ thuật là chuyển --userđối số PEP370 sang setup.pytập lệnh. Với phiên bản mới nhất pip, một cách để làm điều đó là:

pip install --user mercurial

Điều này sẽ dẫn đến hgtập lệnh được cài đặt $HOME/.local/bin/hgvà phần còn lại của gói hg trong $HOME/.local/lib/pythonx.y/site-packages/.

Lưu ý rằng những điều trên là đúng với Python 2.6. Đã có một chút tranh cãi giữa các nhà phát triển lõi Python về vị trí thư mục phù hợp trên Mac OS X để usercài đặt theo kiểu PEP370 . Trong Python 2.7 và 3.2, vị trí trên Mac OS X đã được thay đổi từ $HOME/.localthành $HOME/Library/Python. Điều này có thể thay đổi trong một bản phát hành trong tương lai. Nhưng, hiện tại, trên 2.7 (và 3.2, nếu hgđược hỗ trợ trên Python 3), các vị trí trên sẽ $HOME/Library/Python/x.y/bin/hg$HOME/Library/Python/x.y/lib/python/site-packages.


Điểm tốt. Thật không may, có một lỗi trong Python 2.7 khiến PYTHONUSERBASE bị bỏ qua cho các bản dựng khung OS X. Nó sẽ được sửa cho Python 2.7.3.
Ned Deily

1
Điều này có vẻ rất khó hiểu. easy_installđược cài đặt trong Mac OS X theo mặc định, vì vậy tôi sẽ chỉ cài đặt pip bên ngoài $HOMEthư mục.
Ai đó vẫn sử dụng bạn MS-DOS

1
Tôi đã cố gắng thay đổi PYTHONUSERBASE sang một vị trí khác. Không thành công. Làm thế nào điều này được thực hiện trên Windows cụ thể?
Snerd

2
Coi chừng, nếu bạn làm điều này và sau đó thử sử dụng môi trường conda, các tệp được cài đặt .localsẽ luôn bị tấn công trước, điều này có thể dẫn đến rất khó để theo dõi lỗi nhập.
tacaswell

12
Lưu ý rằng trên OSX, thư mục bin của thư mục trang web người dùng không có trên PATH. Điều này có nghĩa là các tập lệnh được cài đặt bởi các gói trong thư mục trang web của người dùng sẽ không được thực thi trừ khi bạn export PATH=$PATH:~/Library/Python/X.Y/bin/.
André Caron

21

Tôi sẽ sử dụng virtualenv tại thư mục HOME của bạn.

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

Sau đó, bạn cũng có thể thay đổi ~/.(login|profile|bash_profile), tùy theo cái nào phù hợp để shell của bạn thêm ~ / bin vào PATH của bạn và sau đó đó pip|python|easy_installsẽ là cái được sử dụng theo mặc định.


9
Cách "thực tế" để làm điều này là virtualenv venv, source venv/bin/activate. Bạn có thể không nhất thiết muốn luôn luôn sử dụng virtualenv của mình và bằng cách sử dụng phương thức này, lời nhắc của bạn có tiền tố (venv)khi bạn sử dụng nó.
nyuszika7h

2
@ nyuszika7h Chúng tôi biết cách sử dụng virtualenv. Nhưng điều này thực sự trả lời câu hỏi và là một giải pháp rất gọn gàng.
itafire

8
@itsafire "chúng ta" là ai? Tôi khuyên bạn nên đọc en.wikipedia.org/wiki/Weasel_word
nyuszika7h

3
Dù sao, tôi không đồng ý, đây không phải là một "giải pháp gọn gàng". Đó là một hack vô nghĩa.
nyuszika7h

19

Bạn có thể chỉ định -ttùy chọn ( --target) để chỉ định thư mục đích. Xem pip install --helpđể biết thông tin chi tiết. Đây là lệnh bạn cần:

pip install -t path_to_your_home package-name

ví dụ, để cài đặt nói mxnet, trong $HOMEthư mục của tôi , tôi gõ:

pip install -t /home/foivos/ mxnet

Bắt một lỗi distutils.errors.DistutilsOptionError: can't combine user with prefix, exec_prefix/home, or install_(plat)base. Nó có nghĩa là gì?
Anthony Kong

Kiểm tra github.com/pypa/pip/issues/3826 để biết một cuộc thảo luận liên quan. Tôi không biết gì thêm về điều này, nhưng tôi chưa bao giờ gặp phải vấn đề nào trong môi trường của mình.
Foivos
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.