Tworzenie virtualenv dla różnych wersji Python'a

0

Cześć.
Pracuje nad softem który z poziomu Javy (nie ma to znaczenia) ma tworzyć wirtualne środowisko dla Pythona i tam coś w nim robić. Do tworzenia takiego środowiska wykorzystuje virtualenv i polecenia konsolowe które uruchamiam z poziomu Javy. Problem w tym że muszę tworzyć takie środowisko dla Pythona 2 lub 3. Aby coś takiego zrobić pod windowsem trzeba wywołać:

virtualenv -p path/python.exe

Niestety mój tool nie ma pojęcia gdzie zainstalowano Pythona w obu wersjach. Aktualnie robię to mniej więcej tak (https://stackoverflow.com/a/22626734/5877109):

  1. Klient musi mieć zainstalowane 2 wersje Pythona w dowolnym miejscu.
  2. Dodaje do zmiennych środowiskowych ścieżki do obu wersji.
  3. W wersji Python 2 plik .exe należy zmienić z python.exe na python2.exe
  4. Mogę wówczas wywoływać polecenia:
virtualenv -p python2.exe

lub

virtualenv -p python.exe

Średnio mi się to podoba bo jeśli klient nie wykona poprawnie wszystkich kroków to wszystko się sypie.
Ma ktoś na to jakieś sensowne rozwiązanie? Na Linuxie sprawa jest prosta ale pod windowsa jak zwykle trzeba kombinować.

1

Próbowałeś odczytać tą ścieżkę instalacyjną z rejestru
Według internetów

HKLM\SOFTWARE\Python\PythonCore\versionnumber\InstallPath

Ewentualnie zrobić to w trakcie instalacji programu lub prosząc o uprawnienia na start. Inna opcja to przeszukanie ścieżki PATH lub jeśli jest możliwość wystartowania w konsoli pythona jako python2 lub python3 uruchamiając skrypt

import os
import sys
os.path.dirname(sys.executable)
0
CorvusEtiam napisał(a):

Próbowałeś odczytać tą ścieżkę instalacyjną z rejestru
Według internetów

HKLM\SOFTWARE\Python\PythonCore\versionnumber\InstallPath

Jeszcze nie ale zaraz zobaczę czy coś tam znajdę.

CorvusEtiam napisał(a):

Ewentualnie zrobić to w trakcie instalacji programu lub prosząc o uprawnienia na start.

To niestety niemożliwe

CorvusEtiam napisał(a):

jeśli jest możliwość wystartowania w konsoli pythona jako python2 lub python3 uruchamiając skrypt

import os
import sys
os.path.dirname(sys.executable)

Chyba nie do końca robi to co zakładalismy bo na wyjściu dostaje ścieżkę do venv'a: C:\Users\xxx\Desktop\Python\Env1\Scripts


EDIT
@CorvusEtiam na wyjściu dostawałem taką ścieżkę bo miałem aktywowane wirtualne środowisko. Jak sobie je dezaktywowałem to faktycznie to śmiga.
Dzięki temu z poziomu kodu robię:

py -2 script.py 

lub

py -3 script.py 

i dostaje ścieżki do katalogów obu wersji. Jedyne co klient musi tak naprawdę zrobić to zainstalować na windowsie Pythona przez installer wówczas możliwe jest wywoływanie pythona właśnie przez polecenie py -2/3 script.py .

Dzięki temu to co dostanę ze skryptu doklejam do python.exe i mam dynamicznie zbudowany url do odpowiedniej wersji Pythona!
Dzięki, Myślę że to mi wystarczy póki co.

Ps. Szkoda że na Linuxie działa to inaczej bo bym miał jedną komende uniwersalną no ale pomyślę i może jakoś to uspójnię... Tak czy inaczej dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1