2015-11-20 18 views
5

Như chúng ta đều biết, hệ điều hành Mac được cài đặt sẵn python của riêng nó.Nhiều cài đặt python và pip, dude, các gói trang web của tôi ở đâu?

Đề xuất có vẻ là để riêng biệt và sử dụng homebrew để cài đặt một con trăn tươi vào hệ thống.

Vấn đề của tôi là sau khi cài đặt python (và pip) bằng homebrew, pip sẽ cài đặt gói vào các gói trang web Mac OS thay vì của riêng tôi. Tôi đã xác nhận tôi đang chạy "homebrew" pip:

$ which pip 
/usr/local/bin/pip 

Nhưng sau đó khi tôi pip cài đặt một cái gì đó tôi có thể se nó được cài đặt tại địa chỉ:

/lib/python2.7/site-packages 

Pip nên được lắp đặt tại /usr/local/lib/python2.7/site-packages trừ khi i' m bỏ lỡ hiểu điều gì đó.

Điều đáng ngạc nhiên là kiểm tra với -V mang lại một kết quả đáng ngạc nhiên:

pip -V 
pip 7.1.0 from /usr/local/lib/python2.7/site-packages (python 2.7) 

Chạy pip list chỉ sau khi chạy pip install không hiển thị các gói được cho là chỉ cần cài đặt của nó, nhưng đi đến sai trang web gói .

Thêm vào đây, các gói được cài đặt trên /lib/python2.7/site-packages không được nhận dạng bởi $ PYTHONPATH của tôi và vì vậy tôi không thể sử dụng chúng.

Để thêm nhầm lẫn hơn nữa, tôi quyết định sử dụng virtualenv, nhưng tôi đã ngạc nhiên khi sử dụng pip với virtualenv đang hoạt động được cài đặt vào /lib/python2.7/site-packages thay vì gói trang web virtualenv. Vì vậy, bằng cách nào đó tôi đã kết thúc với một pip homebrew, mà cài đặt các gói bên ngoài các gói trang web homebrew và một thông dịch viên python không thể sử dụng các gói được cài đặt bởi pip.

Bạn khuyên tôi nên tìm hiểu nguyên nhân gốc rễ và trải nghiệm trăn trơn tru như thế nào? :)

+0

Bạn có '. venv/bin/activate' vitualenv của bạn? – Ray

Trả lời

0

Tôi nghĩ sau khi bạn kích hoạt virtualenv, đường dẫn python của bạn nên trỏ đến vị trí gói trang web môi trường đó - nếu không có thể nó không được kích hoạt. Chỉ khi bạn kích hoạt nó, bạn sẽ chạy pip để nó cài đặt trong các gói trang web của env ảo đó. nếu nó không được kích hoạt, nó sẽ đi theo bất cứ trang web gói khác, nó đã biết về:

  • Bước 1: tạo một env ảo
    • a la ... virtualenv venv
    • Làm điều này một lần duy nhất !
  • Bước 2: Kích hoạt env vitual
    • cái gì đó như source /venv/bin/activate
    • nhu cầu làm mỗi khi bạn muốn sử dụng môi trường ảo này
  • Bước 3: lệnh chạy pip, xem chúng được cài đặt trong các gói trang web ảo env!

Nếu bạn thực hiện bước 3 trước bước 2, bạn không thực sự sử dụng môi trường ảo mà bạn đã tạo, vì vậy tất cả mọi phiên cược bị tắt - Đó có thể là lý do pip vẫn cài đặt ở vị trí cũ.

Bây giờ, đề xuất tổng thể của tôi là đi xa hơn và sử dụng pyenv để cài đặt phiên bản cụ thể của python vào /Users/username/.pyenv folder và bỏ cả hai gói OSX và homebrew mặc định. Nó đơn giản và bạn có thể kiểm soát dễ dàng phiên bản chính xác của python để sử dụng bằng cách phát hành lệnh đơn giản để thay đổi các phiên bản.

THEN sử dụng virtualenv trong python2 hoặc pyvenv nếu trong python3 (không nên nhầm lẫn với pyenv) để xây dựng môi trường vitual với địa phương site-packages riêng của họ để lưu trữ các module pip. Khi bạn kích hoạt virtualenv, $ PYTHONPATH của bạn sẽ chuyển sang vị trí cụ thể.

Dòng chảy sau đó sẽ là:

  • Sử dụng pyenv để kéo xuống và chuyển sang một phiên bản cụ thể của python bạn muốn sử dụng - trọng homebrew và phiên bản OSX.
  • Tạo vitrualenv của bạn. Thao tác này sẽ tạo một thùng chứa liên kết đến ngăn xếp pyenv python mà bạn vừa chỉ định trong bước trước.
  • Kích hoạt virtual env và tiếp tục.

Hoàn toàn kiểm soát môi trường của bạn!

Các vấn đề liên quan