Python: Как создать сценарий построения и активации виртуальной среды? - PullRequest
0 голосов
/ 05 ноября 2018

Я хотел бы написать скрипт на Python, который выполняет 3 вещи:

  1. создание виртуальной среды с python3
  2. активировать эту новую виртуальную среду. (bash: источник myvirtenv / bin / acticate)
  3. установить пакеты с файл require.txt (bash: pip install -r)

В моем проекте я использую обычный пакет virtualenviroment. и я должен сделать это на машине Debian.

Я пытался имитировать команду bash с помощью os.system(), но не делал этого с кодом ниже.

import os
os.system('python3 -m venv test6_env')
os.system('source test6_env/bin/activate')
os.system('pip install -r requirements.txt --user')

Проблема virtualenv не будет активирована и требования не установлены.

Есть ли простой трюк для написания сценариев на этом питоне?

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

Я должен был сделать один подход прямо сейчас, поэтому я оставлю это здесь. У вас должен быть установлен virtualenv. Надеюсь кому-то поможет :)

def setup_env():
    import virtualenv
    PROJECT_NAME = 'new_project'
    virtualenvs_folder = os.path.expanduser("~/.virtualenvs")
    venv_dir = os.path.join(virtualenvs_folder, PROJECT_NAME)
    virtualenv.create_environment(venv_dir)
    command = ". {}/{}/bin/activate && pip install -r requirements.txt".format(virtualenvs_folder, PROJECT_NAME)
    os.system(command)
0 голосов
/ 05 ноября 2018

Проблема в том, что os.system('source test6_env/bin/activate') активирует виртуальную среду только для подоболочки, порожденной этим конкретным вызовом os.system(), а не для любых последующих. Вместо этого запускайте все команды оболочки одним вызовом, например

os.system('python3 -m venv test6_env && . test6_env/bin/activate && pip install -r requirements.txt')

В качестве альтернативы, поместите ваши команды в сценарий оболочки и выполните их с помощью os.system() или, что еще лучше, используя функцию из модуля subprocess, например,

import subprocess
subprocess.run('/path/to/script.sh', check=True)
...