Cách cập nhật môi trường Conda hiện có với tệp .yml


135

Làm thế nào một môi trường conda tồn tại trước có thể được cập nhật với một tệp .yml khác. Điều này cực kỳ hữu ích khi làm việc trên các dự án có nhiều tệp yêu cầu base.yml, local.yml, production.yml, v.v.

Ví dụ, bên dưới là một base.ymltệp có các gói conda-forge, conda và pip:

cơ sở

name: myenv
channels:
  - conda-forge
dependencies:
  - django=1.10.5
  - pip:
    - django-crispy-forms==1.6.1

Môi trường thực tế được tạo ra với : conda env create -f base.yml.

Sau đó, các gói bổ sung cần phải được thêm vào base.yml. Một tập tin khác local.yml, cần phải nhập những cập nhật đó.

Những nỗ lực trước đây để thực hiện điều này bao gồm:

tạo một local.ymltệp có định nghĩa nhập:

channels:

dependencies:
  - pip:
    - boto3==1.4.4
imports:
  - requirements/base. 

Và sau đó chạy lệnh : conda install -f local.yml.

Điều này không hoạt động. Có suy nghĩ gì không?


Có thể cập nhật môi trường hiện đang kích hoạt ?? Tôi mới thử cái này nhưng bản cập nhật đã chuyển sang môi trường có tên trong tệp yml.
Sören

Câu trả lời:


200

Hãy thử sử dụng bản cập nhật conda env :

conda activate myenv
conda env update --file local.yml

Hoặc không cần kích hoạt môi trường (cảm ơn @NumeSanguis):

conda env update --name myenv --file local.yml

12
Bạn không cần dấu bằng giữa -ffile.yml. Xóa dấu bằng sẽ làm cho việc hoàn thành tab hoạt động trên .ymltên tệp.
BallpointBen

4
Thêm --name env_nameđể bỏ qua bất kỳ name: foothẻ trong local.yml. Cũng ngăn chặn sự cần thiết phải kích hoạt myenv đầu tiên. Full lệnh: conda env update --name env_name --file local.yml Từ: stackoverflow.com/a/45525593/3399066 's bình luận
NumesSanguis

1
Trong phiên bản conda gần đây nhất, tôi nghĩ rằng chúng tôi sử dụng "conda kích hoạt myenv" thay vì "nguồn kích hoạt myenv"
teter123f

30

Câu trả lời được đề xuất là một phần chính xác. Bạn sẽ cần thêm tùy chọn --prune để gỡ cài đặt các gói đã bị xóa khỏi môi trường.yml . Lệnh đúng:

conda env update -f local.yml --prune

Ngay cả cờ --prune cũng không đủ để loại bỏ các phụ thuộc được cài đặt pip ...
Jean Paul

Thật. Tôi nghĩ rằng nó sẽ loại bỏ các phụ thuộc conda nhưng không loại bỏ các phụ thuộc được liệt kê theo pip
Blink

22

Câu trả lời của alkamid là đúng dòng, nhưng tôi đã thấy rằng Conda không cài đặt được các phụ thuộc mới nếu môi trường đã hoạt động. Vô hiệu hóa môi trường trước tiên giải quyết điều này:

source deactivate;
conda env update -f whatever.yml;
source activate my_environment_name; # Must be AFTER the conda env update line!

4
Làm thế nào để conda biết env nào sẽ cập nhật nếu nó không hoạt động?
Thomas Fauskanger

5
@ThomasFauskanger bạn có thể chỉ định rõ ràng với nó -n <environment name>, nhưng theo mặc định, nó dường như hoạt động với môi trường dự kiến ​​(có thể là hoạt động gần đây nhất hoặc chỉ là lựa chọn môi trường mặc định)
Dave

18
@ThomasFauskanger Tên của môi trường được chỉ định trong tệp YAML nếu nó đã được xuất bởi conda.
Thomas

Tôi nghĩ rằng điểm cũ của câu hỏi này là cập nhật một môi trường khác với môi trường được chỉ định trong tệp yaml.
Giacomo

1
@ThomasFauskanger tệp yaml bao gồm tên môi trường
Abdulrahman Bres
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.