2014-12-03 13 views
5

Ich habe zwei Dateien im selben Verzeichnis, und es gibt keine __init__.py Dateien überall:Wie funktioniert dieser Python-Import?

c:\work\test>tree 
. 
|-- a 
| `-- a 
|  |-- a1.py 
|  `-- a2.py 
`-- b 

eine Datei importiert die andere:

c:\work\test>type a\a\a1.py 
print 'a1-start' 
import a2 
print 'a1-end' 

c:\work\test>type a\a\a2.py 
print 'a2' 

Der Import sogar gelingt es, wenn aus einem ganz anderen Ort läuft :

c:\work\test\b>python ..\a\a\a1.py 
a1-start 
a2 
a1-end 

ich bin mit

c:\work\test>python -V 
Python 2.7.3 

und meine PYTHONPATH und PYTHON Variablen werden nicht

c:\work\test>echo %PYTHONPATH% %PYTHONHOME% 
%PYTHONPATH% %PYTHONHOME% 

Wie a1.pya2 nicht finden?

+0

ich eine Vermutung hazzard würde, dass wie PHP, Python mehrere Standorte bewerten würde Dateien zu finden, die das aktuelle Arbeitsverzeichnis inklusive? –

+0

Das aktuelle Arbeitsverzeichnis wird' test \ b ' ... – thebjorn

+0

das Skript läuft von einem aber vergeben mein Mangel an Python-Wissen, aber PHP und ich glaube, die meisten Sprachen würde dieses Szenario ähnlich behandeln, wenn Sie .. das Ändern des Arbeitsverzeichnisses für das Skript nur –

Antwort

8

Ein Zitat aus dem module docs (Hervorhebung von mir):

„Wenn ein Modul namens Spam importiert wird, sucht der Interpreter sucht zuerst ein mit diesem Namen Modul in-built Wenn nicht gefunden, es für eine sucht dann. Datei mit dem Namen spam.py in einer Liste von Verzeichnissen, die durch die Variable sys.path gegeben sys.path von diesen Orten initialisiert wird:..

  • das Verzeichnis mit der Eingabeskript (oder dem aktuellen Verzeichnis) enthält
  • PYTHONPATH (eine Liste von Verzeichnisnamen mit der gleichen Syntax wie die Shellvariable PATH).
  • die Installation abhängige Standard.“
+0

Ah, ich war verwirrt, weil ich nirgendwo in 'sys.path' einen Verweis auf' test \ a \ a' sah (der mit '['', 'c: \\ python27 \\ lib .. beginnt. '). – thebjorn

+0

@thebjorn: '' '' bezieht sich auf den fettgedruckten Teil von ofrommels Antwort. Siehe ['sys.path'] (https://docs.python.org/3/library/sys.html#sys.path). – Kevin