Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 11, 2018 12:11:26

Gosha777
Зарегистрирован: 2017-05-12
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Активация виртуального окружения из скрипта

Всем привет! Подскажите, можно ли из скрипта вызывать виртуальное окружение? Что-то вроде такого:

 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'])

Отредактировано Gosha777 (Янв. 11, 2018 12:12:49)

Офлайн

#2 Янв. 11, 2018 12:16:01

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Активация виртуального окружения из скрипта

Зачем? Если вы хотите запустить питонью программу из виртуального окружения не обязательно его активировать, нужно только знать путь до your_virualenv/bin/python и этим интерпретатором и исполняйте вашу программу.



Офлайн

#3 Янв. 11, 2018 12:19:46

Gosha777
Зарегистрирован: 2017-05-12
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Активация виртуального окружения из скрипта

FishHook
Зачем? Если вы хотите запустить питонью программу из виртуального окружения не обязательно его активировать, нужно только знать путь до your_virualenv/bin/python и этим интерпретатором и исполняйте вашу программу.
Чтобы пользователь этим не заморачивался

Офлайн

#4 Янв. 11, 2018 15:11:11

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Активация виртуального окружения из скрипта

Gosha777
То есть? Вы понимаете, что виртуаненв - это просто выделенный в отдельный каталог интерпретатор питона и набор библиотек? Как вы планируете сначала запустить программу, а потом активировать виртуаленв? Есть же строгая последовательность причин и следствий. Нельзя съесть самого себя или родить самого себя или запусть программу изнутри самой этой же программы. Я вам выше написал, просто сделайте пользователю ярлык

 > my_programm/virtualenv/bin/python my_programm/code/main.py



Офлайн

#5 Янв. 11, 2018 20:07:04

Gosha777
Зарегистрирован: 2017-05-12
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Активация виртуального окружения из скрипта

FishHook
Gosha777То есть? Вы понимаете, что виртуаненв - это просто выделенный в отдельный каталог интерпретатор питона и набор библиотек? Как вы планируете сначала запустить программу, а потом активировать виртуаленв? Есть же строгая последовательность причин и следствий. Нельзя съесть самого себя или родить самого себя или запусть программу изнутри самой этой же программы. Я вам выше написал, просто сделайте пользователю ярлык
Немного не понял, что должно быть на выходе. Что за ярлыки?
У меня есть my_programm → virtualenv → Scripts → python.exe
И my_programm → virtualenv → Scripts → activate.bat

Я так понял, это ключевые файлы?

Офлайн

#6 Янв. 12, 2018 04:41:07

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Активация виртуального окружения из скрипта

Gosha777
У меня есть my_programm → virtualenv → Scripts → python.exe
Это, блин - питон.
Что вам еще надо, для запуска питоньего приложения?



Офлайн

#7 Янв. 12, 2018 08:43:43

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Активация виртуального окружения из скрипта

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




Офлайн

#8 Янв. 12, 2018 08:43:45

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Активация виртуального окружения из скрипта

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




Офлайн

#9 Янв. 12, 2018 22:12:09

Gosha777
Зарегистрирован: 2017-05-12
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Активация виртуального окружения из скрипта

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

Офлайн

#10 Янв. 12, 2018 22:48:05

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Активация виртуального окружения из скрипта

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





Отредактировано doza_and (Янв. 12, 2018 22:49:30)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version