Làm cách nào để theo dõi các gói cài đặt pip trong môi trường Anaconda (Conda)?


141

Tôi đã cài đặt và đang sử dụng bản phân phối Anaconda Python và tôi đã bắt đầu sử dụng môi trường Anaconda (Conda). Tôi có thể sử dụng conda install...lệnh tiêu chuẩn để đưa các gói từ phân phối vào môi trường của mình, nhưng để sử dụng bất cứ thứ gì bên ngoài (ví dụ Flask-WTF, jar-sqlalchemy và alembic) tôi cần sử dụng pip installtrong môi trường hoạt động. Tuy nhiên, khi tôi xem nội dung của môi trường, trong thư mục hoặc sử dụng conda listcác pip installgói ed này sẽ không hiển thị.

Sử dụng pip freezepip listchỉ liệt kê mọi gói tôi đã từng cài đặt.

Có cách nào để theo dõi những gì có trong mỗi chiếc Anaconda của tôi env(cả pipcondađược cài đặt) không?


7
Sử dụng pipđược cài đặt với conda, ví dụ ~/anaconda/bin/pip. Sử dụng nó để cài đặt các gói vào một condamôi trường, cũng như để xem sự kết hợp của các gói được cài đặt với cái này pipvà với conda install.
osa

7
conda listhiện tại đã bao gồm các gói python được cài đặt bằng các phương tiện khác (ví dụ: pip, dễ cài đặt, trực tiếp với python setup.py install, v.v.)
kalefranz

1
Không nâng cấp pip của bạn hoặc xuất khẩu này sẽ bị hos
Andrew Cassidy

Câu trả lời:


120

conda-env bây giờ thực hiện điều này tự động (nếu pip được cài đặt với conda).

Bạn có thể thấy cách thức hoạt động của nó bằng cách sử dụng công cụ xuất khẩu được sử dụng để di chuyển một môi trường:

conda env export -n <env-name> > environment.yml

Các tập tin sẽ liệt kê cả gói conda và gói pip:

name: stats
channels:
  - javascript
dependencies:
  - python=3.4
  - bokeh=0.9.2
  - numpy=1.9.*
  - nodejs=0.10.*
  - flask
  - pip:
    - Flask-Testing

Nếu bạn đang tìm cách thực hiện thông qua việc xuất môi trường, hãy chuyển environment.ymlsang máy chủ mới và chạy:

conda env create -f path/to/environment.yml

64

condasẽ chỉ theo dõi các gói nó đã cài đặt. Và pipsẽ cung cấp cho bạn các gói được cài đặt bằng chính trình pipcài đặt hoặc chúng được sử dụng setuptoolstrong setup.pybản dựng conda của chúng tạo ra thông tin trứng. Vì vậy, về cơ bản bạn có ba lựa chọn.

  1. Bạn có thể kết hợp các conda listpip freezevà quản lý các gói đã được cài đặt bằng cách sử dụng conda(hiển thị trong conda list) với condatrình quản lý gói và các gói được cài đặt pip(hiển thị trong pip freezenhưng không hiển thị conda list) với pip.

  2. Cài đặt chỉ trong môi trường của bạn python, pipdistributecác gói và quản lý tất cả mọi thứ với pip. (Đây không phải là chuyện nhỏ nếu bạn ở trên Windows ...)

  3. Xây dựng các condagói của riêng bạn , và quản lý mọi thứ với conda.

Cá nhân tôi muốn giới thiệu tùy chọn thứ ba vì việc xây dựng condacác gói rất dễ dàng . Có một kho git gồm các công thức nấu ăn mẫu trên tài khoản github của continuum. Nhưng nó thường sôi sùng sục xuống:

 conda skeleton pypi PACKAGE
 conda build PACKAGE

hoặc chỉ:

conda pipbuild PACKAGE

Ngoài ra khi bạn đã xây dựng chúng một lần, bạn có thể tải chúng lên https://binstar.org/ và chỉ cần cài đặt từ đó.

Sau đó, bạn sẽ có mọi thứ được quản lý bằng cách sử dụng conda.


3
Tôi chỉ cố gắng ~/anaconda/bin/pip install memory-profilerconda install numba, và cả hai đều được hiển thị trong ~/anaconda/bin/pip freeze.
osa

2
"Kho git của các công thức nấu ăn mẫu trên tài khoản github của continuum" Ý bạn là github.com/ContinuumIO/anaconda-recipes ? Vui lòng liên kết nếu bạn có thể
endolith

Điều này không thực sự cài đặt gói để bạn có thể nhập nó, mặc dù. Bạn phải làm conda install C:\...PACKAGE-0.0.0-py27_0.tar.bz2như được mô tả trong stackoverflow.com/a/20750388/125507
endolith

Tôi muốn nói trước tiên luôn có conda install python=3.x.ytrong môi trường conda của bạn để các cài đặt pip tiếp theo đi qua pip cài đặt conda.
Ustaman Sangat

24

Có một nhánh của conda (new-pypi-install) giúp tích hợp tốt hơn với pip và PyPI. Trong danh sách conda cụ thể cũng sẽ hiển thị các gói cài đặt pip và cài đặt conda trước tiên sẽ cố gắng tìm gói conda và không sử dụng pip để cài đặt gói.

Chi nhánh này dự kiến ​​sẽ được sáp nhập vào cuối tuần này để phiên bản 2.1 của conda sẽ tích hợp pip tốt hơn với conda.


2
Tôi muốn chỉ ra rằng điều này đã hoạt động trong conda 2.2.3 (và có lẽ trước đó). Cách thức hoạt động là nếu bạn cố gắng conda install packagevà không thể tìm thấy công thức conda, nó sẽ cố gắng cài đặt nó qua pip(và sau đó theo dõi nó). Nó thậm chí còn hữu ích đề nghị cài đặt pipnếu không trong môi trường của bạn. Cảm ơn Travis cho tất cả công việc của bạn!
jorgeca

5
Làm rõ, vì tôi đã đọc sai điều này nhiều lần. @Travis có nghĩa là tôi nghĩ rằng nếu một người đang chạy trong một conda, thì chạy pip trước tiên sẽ tìm kiếm các gói conda? Điều ngược lại hoàn toàn không đúng - cài đặt conda không tìm kiếm các gói pypi, thậm chí không có các mục trên pypi.binstar.org. Điều này là như của conda 3.5.2.
AnneTheAgile

9
Điều này đã được gỡ bỏ? Nếu tôi chạy, giả sử, conda install autopep8nó cho tôi biết "Không tìm thấy gói nào" và tôi nên tìm kiếm anaconda.org bằng tay.
endolith

@AnneTheAgile running pip...cũng không hoạt động, nó sẽ không tìm gói conda nào cả.
Vương

16

Tôi đã làm theo câu trả lời của @Viktor Kerkez và đã gặt hái được nhiều thành công. Tôi thấy rằng đôi khi công thức này của

conda bộ xương pypi GÓI

conda xây dựng GÓI

sẽ trông giống như mọi thứ hoạt động nhưng tôi không thể nhập thành công GÓI. Gần đây tôi đã hỏi về điều này trên nhóm người dùng Anaconda và được nghe từ chính @Travis Oliphant về cách tốt nhất để sử dụng conda để xây dựng và quản lý các gói không giao hàng với Anaconda. Bạn có thể đọc chủ đề này ở đây , nhưng tôi sẽ mô tả cách tiếp cận bên dưới để hy vọng làm cho câu trả lời cho câu hỏi của OP hoàn chỉnh hơn ...

Ví dụ: Tôi sẽ cài đặt gói Prettyplotlib tuyệt vời trên Windows bằng cách sử dụng conda 2.2.5.

1a) conda build --build-recipe prettyplotlib

Bạn sẽ thấy tất cả các thông báo bản dựng đều trông ổn cho đến phần KIỂM TRA cuối cùng của bản dựng. Tôi thấy lỗi này

Tệp "C: \ Anaconda \ conda-bld \ test-tmp_dir \ run_test.py", dòng 23 nhập Không có SyntaxError: không thể gán cho Không TESTS FAILED: beautifulplotlib-0.1.3-py27_0

1b) Đi vào / conda-công thức nấu ăn / beautifulplotlib và chỉnh sửa tệp meta.yaml. Hiện tại, các gói được thiết lập như trong bước 1a dẫn đến các tệp yaml có lỗi trong testphần. Ví dụ, đây là cách tôi tìm kiếmprettyplotlib

test:   # Python imports   imports:
    - 
    - prettyplotlib
    - prettyplotlib

Chỉnh sửa phần này để xóa dòng trống đi trước - và cũng loại bỏ dòng Prettyplotlib dư thừa. Tại thời điểm viết bài này, tôi thấy rằng tôi cần chỉnh sửa hầu hết các tệp meta.yaml như thế này cho các gói bên ngoài tôi đang cài đặt với conda, có nghĩa là có một dòng nhập trống gây ra lỗi cùng với việc nhập dự phòng của gói đã cho .

1c) Chạy lại lệnh từ 1a, lần này sẽ hoàn thành với lỗi hết. Khi kết thúc bản dựng, bạn sẽ được hỏi xem bạn có muốn tải bản dựng lên binstar không . Tôi đã nhập Không và sau đó thấy thông báo này:

Nếu bạn muốn tải gói này lên binstar.org sau, hãy nhập:

$ binstar tải lên C: \ Anaconda \ conda-bld \ win-64 \ beautifulplotlib-0.1.3-py27_0.tar.bz2

Tệp tar.bz2 đó là bản dựng mà bạn cần cài đặt.

2) conda install C:\Anaconda\conda-bld\win-64\prettyplotlib-0.1.3-py27_0.tar.bz2

Thực hiện theo các bước này, tôi đã sử dụng thành công conda để cài đặt một số gói không đi kèm với Anaconda. Trước đây, tôi đã cài đặt một số trong số này bằng cách sử dụng pip, vì vậy tôi đã làm pip uninstall PACKAGEtrước khi cài đặt GÓI với conda. Sử dụng conda, giờ đây tôi có thể quản lý (gần như) tất cả các gói của mình bằng một cách tiếp cận duy nhất thay vì có một hỗn hợp các công cụ được cài đặt với conda, pip, easy_install và python setup.py cài đặt.

Về ngữ cảnh, tôi nghĩ rằng bài đăng trên blog gần đây của @Travis Oliphant này sẽ hữu ích cho những người như tôi, những người không đánh giá cao mọi thứ đi vào bao bì Python mạnh mẽ nhưng chắc chắn đánh giá cao khi công cụ "chỉ hoạt động". conda có vẻ như là một cách tuyệt vời về phía trước ...


2
Sử dụng phiên bản conda 3.5.2, lệnh $ conda build --build-Formula XXX; Lỗi với 'đối số không được nhận dạng: --build-Formula'. Đáp ứng đầy đủ là; cách sử dụng: conda-build [-h] [-c] [--no-binstar-upload] [--output] [-s] [-t] [--no-test] [-V] [-q] RECIPE_PATH [RECIPE_PATH ...] conda-build: lỗi: đối số không được nhận dạng: --build-
Formula


3

Tôi nghĩ những gì còn thiếu ở đây là khi bạn làm:

>pip install .

để cài đặt một gói cục bộ với setup.py, nó sẽ cài đặt một gói hiển thị cho tất cả các envs sử dụng cùng một phiên bản python. Lưu ý tôi đang sử dụng phiên bản conda của pip!

ví dụ: nếu tôi đang sử dụng python2.7, nó sẽ đặt gói cục bộ ở đây:

/usr/local/anaconda/lib/python2.7/site-packages

Nếu sau đó tôi tạo một conda env mới với python = 2.7 (= mặc định):

>conda create --name new

>source activate new

Và sau đó làm:

(new)>conda list    // empty - conda is not aware of any packages yet

Tuy nhiên, nếu tôi làm:

(new)>pip list      // the local package installed above is present

Vì vậy, trong trường hợp này, conda không biết về gói pip, nhưng gói có sẵn cho python.

Tuy nhiên, nếu tôi thay vào đó cài đặt gói cục bộ (một lần nữa sử dụng pip) sau khi tôi đã tạo (và kích hoạt) thì conda env mới, bây giờ conda thấy nó:

(new)>conda list   // sees that the package is there and was installed by pip

Vì vậy, tôi nghĩ rằng sự tương tác giữa conda và pip có một số vấn đề - tức là, sử dụng pip để cài đặt gói cục bộ từ trong một conda env làm cho gói đó có sẵn (nhưng không thấy qua danh sách conda) với tất cả các ena khác của cùng một phiên bản python.



2

Tôi thường tiền tố thư mục 'bin / pip' cho môi trường cụ thể mà bạn muốn cài đặt gói trước lệnh 'pip'. Ví dụ, nếu bạn muốn cài đặt pymc3 trong môi trường py34, bạn nên sử dụng lệnh này:

~/anaconda/envs/py34/bin/pip install git+https://github.com/pymc-devs/pymc3 

Về cơ bản, bạn chỉ cần tìm đúng đường dẫn đến thư mục 'bin / pip' của môi trường của bạn và đặt nó trước lệnh cài đặt.


1

My which piphiển thị đường dẫn sau:

$ which pip
/home/kmario23/anaconda3/bin/pip

Vì vậy, bất kỳ gói nào tôi cài đặt sử dụng pip install <package-name>sẽ phải được phản ánh trong danh sách các gói khi danh sách được xuất bằng:

$ conda list --export > conda_list.txt

Nhưng, tôi không. Vì vậy, thay vào đó tôi đã sử dụng lệnh sau theo đề xuất của một số người khác:

# get environment name by
$ conda-env list

# get list of all installed packages by (conda, pip, etc.,)
$ conda-env export -n <my-environment-name> > all_packages.yml
# if you haven't created any specific env, then just use 'root'

Bây giờ, tôi có thể thấy tất cả các gói trong all-packages.ymltập tin của tôi .


1

Bạn có thể bắt đầu bằng cách cài đặt lệnh đã cho bên dưới trong môi trường conda:

conda install pip

Tiếp theo là cài đặt tất cả các gói pip bạn cần trong môi trường.

Sau khi cài đặt tất cả các gói conda và pip để xuất môi trường, hãy sử dụng:

conda env export -n <env-name> > environment.yml

Điều này sẽ tạo ra các tập tin cần thiết trong thư mục

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.