Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does this Python import work?

Tags:

python

I have two files in the same directory, and there are no __init__.py files anywhere:

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

one file imports the other:

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'

The import succeeds even when run from a completely different location:

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

I'm running

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

and my PYTHONPATH and PYTHONHOME variables are not set

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

How does a1.py find a2?

like image 794
thebjorn Avatar asked Dec 03 '14 15:12

thebjorn


1 Answers

A quote from the module docs (emphasis mine):

"When a module named spam is imported, the interpreter first searches for a built-in module with that name. If not found, it then searches for a file named spam.py in a list of directories given by the variable sys.path. sys.path is initialized from these locations:

  • the directory containing the input script (or the current directory).
  • PYTHONPATH (a list of directory names, with the same syntax as the shell variable PATH).
  • the installation-dependent default."
like image 134
ofrommel Avatar answered Sep 28 '22 06:09

ofrommel