Найти - Пользователи
Полная версия: Активация виртуального окружения из скрипта
Начало » Python для экспертов » Активация виртуального окружения из скрипта
1 2
Gosha777
Всем привет! Подскажите, можно ли из скрипта вызывать виртуальное окружение? Что-то вроде такого:

 run_virtual_env = subprocess.check_call([join('.', 'virtualenv', 'Scripts', 'activate')])

Мне что-то ошибку выбило:
OSError: %1 не является приложением Win32

До активации, конечно же был вызван скрипт:
 create_virtual_env = subprocess.check_call(['python', '-m', 'venv', join('.', 'virtualenv')])
run_pip = subprocess.check_call(['pip', 'install', '-r', 'requirements.txt'])
FishHook
Зачем? Если вы хотите запустить питонью программу из виртуального окружения не обязательно его активировать, нужно только знать путь до your_virualenv/bin/python и этим интерпретатором и исполняйте вашу программу.
Gosha777
FishHook
Зачем? Если вы хотите запустить питонью программу из виртуального окружения не обязательно его активировать, нужно только знать путь до your_virualenv/bin/python и этим интерпретатором и исполняйте вашу программу.
Чтобы пользователь этим не заморачивался
FishHook
Gosha777
То есть? Вы понимаете, что виртуаненв - это просто выделенный в отдельный каталог интерпретатор питона и набор библиотек? Как вы планируете сначала запустить программу, а потом активировать виртуаленв? Есть же строгая последовательность причин и следствий. Нельзя съесть самого себя или родить самого себя или запусть программу изнутри самой этой же программы. Я вам выше написал, просто сделайте пользователю ярлык
 > my_programm/virtualenv/bin/python my_programm/code/main.py
Gosha777
FishHook
Gosha777То есть? Вы понимаете, что виртуаненв - это просто выделенный в отдельный каталог интерпретатор питона и набор библиотек? Как вы планируете сначала запустить программу, а потом активировать виртуаленв? Есть же строгая последовательность причин и следствий. Нельзя съесть самого себя или родить самого себя или запусть программу изнутри самой этой же программы. Я вам выше написал, просто сделайте пользователю ярлык
Немного не понял, что должно быть на выходе. Что за ярлыки?
У меня есть my_programm → virtualenv → Scripts → python.exe
И my_programm → virtualenv → Scripts → activate.bat

Я так понял, это ключевые файлы?
FishHook
Gosha777
У меня есть my_programm → virtualenv → Scripts → python.exe
Это, блин - питон.
Что вам еще надо, для запуска питоньего приложения?
doza_and
Gosha777
Немного не понял, что должно быть на выходе. Что за ярлыки?
Ну что тут поделаешь.
Gosha777
Чтобы пользователь этим не заморачивался
Давайте так, опишите последовательность действий пользователя сейчас при:
1. Установке вашего приложения
2. запуске приложежния
3. удалении вашего приложения

Опишите какие действия надо убрать.

Пока полное впечатление что вы планируете выполнять действия которые вовсе не нужны.

А пример у вас вообще неправильный Прежде всего он должен быть синтаксически верен.

 >>> join('.', 'virtualenv', 'Scripts', 'activate')
Traceback (most recent call last):
  File "<string>", line 301, in runcode
  File "<interactive input>", line 1, in <module>
NameError: name 'join' is not defined


doza_and
Gosha777
Немного не понял, что должно быть на выходе. Что за ярлыки?
Ну что тут поделаешь.
Gosha777
Чтобы пользователь этим не заморачивался
Давайте так, опишите последовательность действий пользователя сейчас при:
1. Установке вашего приложения
2. запуске приложежния
3. удалении вашего приложения

Опишите какие действия надо убрать.

Пока полное впечатление что вы планируете выполнять действия которые вовсе не нужны.

А пример у вас вообще неправильный Прежде всего он должен быть синтаксически верен.

 >>> join('.', 'virtualenv', 'Scripts', 'activate')
Traceback (most recent call last):
  File "<string>", line 301, in runcode
  File "<interactive input>", line 1, in <module>
NameError: name 'join' is not defined


Gosha777
doza_and
1. Как пользователь устанавливает программу сейчас:
-Пользователь устанавливает Python и обязательно ставит галочку, чтобы добавить его в переменную Path.
-Затем запускает в программе скрипт install.py:
 import subprocess
from os.path import join
run_pip = subprocess.check_call(['pip', 'install', '-r', 'requirements.txt'])
input('Модули установлены. Нажмите Enter, чтобы завершить программу: ')

2. После установки запускает главный исполняющий скрипт start.py.
3. Даже не думал об удалении, если честно. Какие здесь могут возникнуть трудности?

Пример не правлиьный, т.к. я импорты не прописал.

Ну и соотетственно из логики выше, я бы хотел изолировать свою программу от других, если вдруг у него на машине работают ещё какие-либо питоновские скрипты и при этом, чтобы пользователь не заморачивался с запуском тераминала, вводом команд и тем более запуском виртуального окружения.

Соответственно, как и писал выше хотел добавить:
- В install.py:
 subprocess.check_call(['python', '-m', 'venv', join('.', 'virtualenv')])

- В start.py:
 subprocess.check_call(['pip', 'install', '-r', 'requirements.txt'])

Но мне выдало ошибку:
OSError: %1 не является приложением Win32

doza_and
Gosha777
Пользователь устанавливает Python и обязательно ставит галочку
Судя по галочке это windows. можно написать bat файл который при помощи msiinstall все поставит без вопросов по умолчанию. (это на любителя)
Gosha777
я бы хотел изолировать свою программу от других,
По поводу виртуального окружения ничего не скажу, мы им вообще не пользуемся. Никакого “если вдруг” за последние 10 лет активного использования питона не случалось.

Очевидно называть скрипт start.py плохой тон. start в винде это специальная команда.

Опираясь на знания FishHook очевидно что в В start.py вызывать pip глупо. Это надо делать в install один раз.
Для запуска можете сделать my_app.bat
с содержимым
python.exe st.py пользователь должен тыкать в этот файл. (альтернативный вариант это как вам указывали сделать ярлык)

указывайте путь к питону который вам нравится (с venv достаточно того что я привел).

OSError: %1 не является приложением Win32
Берете консоль (в папке вашего приложения) и в ней набираете pip.exe install -r requirements.txt. думаю не будет работать т.к. насколько помню в винде путь к Scripts не дописывался в path. Правится указанием полного пути к pip.exe



This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB