2015-06-03 10 views
5

Aktualnie mam Python 3.4 jako moją domyślną wersję Pythona, ale chcę tymczasowo ustawić Python 2.7 jako domyślny.Program uruchamiający Python dla systemu Windows nie czyta `py.ini`

Jestem w systemie Windows 7, a skrypty w języku Python są uruchamiane przy użyciu programu uruchamiającego Python dla systemu Windows. The documentation says Mogę go dostosować, tworząc plik py.ini, ale to nie działa. Stworzyłem plik z tych treści:

[defaults] 
python=2.7 

Próbowałem umieszczenie go w tym samym folderze co plik biegnę, Próbowałem umieszczenie go w C:\Users\Administrator\ w C:\Users\Administrator\AppData\ aw C:\Users\Administrator\AppData\Local\, ale żaden z nich pracował. Program uruchamiający nadal używa Pythona 3.4. (Zarówno podczas I kliknij dwukrotnie plik w Windows UI i zarówno kiedy uruchomić wyrzutnię bezpośrednio, jak py my_file.py.)

Dlaczego wyrzutnia Python Okna ignorując mój plik py.ini?

Oto wyjście z systemem py age.py ze zmiennej środowiskowej PYLAUNCH_DEBUG zestawie:

launcher build: 32bit                 
launcher executable: Console               
Using local configuration file 'C:\Users\Administrator\AppData\Local\py.ini'   
File 'C:\Windows\py.ini' non-existent             
Called with command line: age.py              
maybe_handle_shebang: read 256 bytes             
maybe_handle_shebang: BOM not found, using UTF-8          
parse_shebang: found command: python             
searching PATH for python executable             
Python on path: C:\python34\python.EXE             
located python on PATH: C:\python34\python.EXE           
run_child: about to run 'C:\python34\python.EXE age.py'        
Traceback (most recent call last):              
    File "age.py", line 17, in <module>             
    name = raw_input("Enter a person's name to check their age: ")      
NameError: name 'raw_input' is not defined            
child process exit code: 1 
+0

Spróbuj użyć shebang, '#!/bin/env python2.7' na górze skryptu, odnosząc się do lokalizacji' Python27'? – ZdaR

+0

Ustaw zmienną środowiskową 'PYLAUNCH_DEBUG' na dowolną wartość i uruchom skrypt za pomocą' py my_file.py' w oknie wiersza polecenia. Jakie wyniki daje to? –

+0

@ZdaR Ważne jest, aby ten skrypt nie zawierał kodu. –

Odpowiedz

1

documentation for Python 3.5 opisuje ten problem:

/usr/bin/env forma linii shebang ma jedną dodatkową właściwość specjalnego. Przed odszukaniem zainstalowanych interpreterów Pythona, ten formularz wyszuka plik wykonywalny PATH dla pliku wykonywalnego Pythona. Odpowiada to działaniu programu Unix env, który wykonuje przeszukiwanie PATH.

Co ciekawe ta sama funkcjonalność wydaje się mieć zastosowanie do Python 3.4, jak również (lub w wersji co najmniej 3.4.3), mimo corresponding documentation page for Python 3.4 nie wspominając go. Na dole tej odpowiedzi umieściłem reprodukcję tego zachowania.

Wygląda na to, że skrypt zawiera linię shebang #!/usr/bin/env python u góry, a C:\Python34 jest w systemie PATH przed pojawieniem się C:\Python27. Mówisz, że w komentarzu, że

Ważne jest za to konkretny skrypt nie mieć shebang

ale linia

parse_shebang: found command: python 

w swoim wyjściu wyrzutni oddaje fakt, że skrypt musi rzeczywiście mieć linię shebang.


Mam Python Python 3.4.3 i 2.7.10 zainstalowany w systemie, z 3,4 na 2,7 przed PATH.Mam też plik py.ini w C:\Users\Luke\AppData\Local który zawiera następujące elementy:

[defaults] 
python=2 

i test.py skrypt zawierający

#!/usr/bin/env python 
import sys; print(sys.version_info) 

mam ustawić wartość zmiennej środowiskowej PYLAUNCH_DEBUG do 1. Uruchomienie tego skryptu przy użyciu py test.py, pojawia się następujący komunikat:

launcher build: 32bit 
launcher executable: Console 
Using local configuration file 'C:\Users\Luke\AppData\Local\py.ini' 
File 'C:\WINDOWS\py.ini' non-existent 
Called with command line: test.py 
maybe_handle_shebang: read 60 bytes 
maybe_handle_shebang: BOM not found, using UTF-8 
parse_shebang: found command: python 
searching PATH for python executable 
Python on path: C:\Python34\python.EXE 
located python on PATH: C:\Python34\python.EXE 
run_child: about to run 'C:\Python34\python.EXE test.py' 
sys.version_info(major=3, minor=4, micro=3, releaselevel='final', serial=0) 
child process exit code: 0 

Jeśli zmienię mojego test.py skrypt

#! python 
import sys; print(sys.version_info) 

(czyli usunąć /usr/bin/env z linii shebang) i ponownie uruchomić py test.py, ja uzyskać następujące:

launcher build: 32bit 
launcher executable: Console 
Using local configuration file 'C:\Users\Luke\AppData\Local\py.ini' 
File 'C:\WINDOWS\py.ini' non-existent 
Called with command line: test.py 
maybe_handle_shebang: read 48 bytes 
maybe_handle_shebang: BOM not found, using UTF-8 
parse_shebang: found command: python 
locating Pythons in 64bit registry 
locate_pythons_for_key: unable to open PythonCore key in HKCU 
locate_pythons_for_key: unable to open PythonCore key in HKLM 
locating Pythons in native registry 
locate_pythons_for_key: unable to open PythonCore key in HKCU 
locate_pythons_for_key: C:\Python27\python.exe is a 32bit executable 
locate_pythons_for_key: C:\Python27\PCBuild\python.exe: The system cannot find the path specified. 
locate_pythons_for_key: C:\Python27\PCBuild\amd64\python.exe: The system cannot find the path specified. 
locate_pythons_for_key: C:\Python34\python.exe is a 32bit executable 
locate_pythons_for_key: C:\Python34\PCBuild\python.exe: The system cannot find the path specified. 
locate_pythons_for_key: C:\Python34\PCBuild\amd64\python.exe: The system cannot find the path specified. 
found configured value 'python=2' in C:\Users\Luke\AppData\Local\py.ini 
search for default Python found version 2.7 at 'C:\Python27\python.exe' 
run_child: about to run 'C:\Python27\python.exe test.py' 
sys.version_info(major=2, minor=7, micro=10, releaselevel='final', serial=0) 
child process exit code: 0 
+0

Solidne rozumowanie, ale nie działa nawet po usunięciu linii shebang. Debugowanie tutaj: https://gist.github.com/cool-RR/b2f5e086a7adaeaf5cbd –

+0

@RamRachum, ale teraz twoje wyjście do debugowania mówi, że nie może znaleźć py.ini: "' Plik 'C: \ Users \ Administrator \ AppData \ Local \ py.ini "nie istnieje". Ale "" znalazł skonfigurowaną wartość "python = 3" w środowisku ", tzn. Ustawiono zmienną środowiskową" PY_PYTHON = 3 ". – eryksun

+0

@eryksun Przepraszamy, prawdopodobnie mój błąd, ale teraz upewniłem się, że plik istnieje i nadal nie działa: https://gist.github.com/cool-RR/adbd67d87944a5971f0e –

Powiązane problemy