Используйте Anaconda с несколькими средами в одном скрипте - PullRequest
0 голосов
/ 23 октября 2019

Допустим, у меня есть скрипт с двумя проектами, каждый из которых имеет свою среду анаконды и свои пакеты. Например, пакеты, необходимые из проекта 1, находятся в env1, а пакеты, необходимые из проекта 2, находятся в env2. Конечно, когда мне нужно запустить project1, я активирую источник env1 и наоборот для project2. Теперь в моем скрипте Python, находясь в env1, мне нужно запустить project2, например:

source activate env1
python project1.py

project1.py:

import libraries_for_project1
from file_for_project2 import ClassProject2

#project1 stuff
ClassProject2.somemethod() #project2 stuff
#project1 stuff

Что я хочу сделать, это изменить (илиактивируйте выше) env2 внутри самого скрипта python. Я попробовал:

import libraries_for_project1
from file_for_project2 import ClassProject2
import os
import subprocess 

#project1 stuff

subprocess.run("bash -c 'source activate ~/anaconda3/envs/env2'", shell=True)
print(os.environ['CONDA_DEFAULT_ENV']) #this return env1
ClassProject2.somemethod() #this cause errors because of some packages are not installed in env1
subprocess.run("bash -c 'source deactivate'", shell=True)
print(os.environ['CONDA_DEFAULT_ENV'])

#project1 stuff

Есть ли у вас какие-либо предложения? (Конечно, я не могу установить библиотеки env2 в env1)

1 Ответ

0 голосов
/ 23 октября 2019

Модульный и создать отдельный файл / папку для проекта2. Дело в том, что когда вы работаете в одной среде и хотите начать выполнение некоторой части кода с использованием другой среды, это невозможно, поскольку выполнение начинается с начала.

Пример:

import pandas
pandas.import_csv('something.csv')
# Start using the second environment
## Code to be executed using another environment
## Write this code as a separate file
## Write code to execute that file using environment 2
# After Completion of execution
# Continue your code which doesn't require environment 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...