There are two directories on my desktop, DIR1
and DIR2
which contain the following files:
DIR1:
file1.py
DIR2:
file2.py myfile.txt
The files contain the following:
file1.py
import sys
sys.path.append('.')
sys.path.append('../DIR2')
import file2
file2.py
import sys
sys.path.append( '.' )
sys.path.append( '../DIR2' )
MY_FILE = "myfile.txt"
myfile = open(MY_FILE)
myfile.txt
some text
Now, there are two scenarios. The first works, the second gives an error.
Scenario 1
I cd
into DIR2
and run file2.py
and it runs no problem.
Scenario 2
I cd
into DIR1
and run file1.py
and it throws an error:
Traceback (most recent call last):
File "<absolute-path>/DIR1/file1.py", line 6, in <module>
import file2
File "../DIR2/file2.py", line 9, in <module>
myfile = open(MY_FILE)
IOError: [Errno 2] No such file or directory: 'myfile.txt'
However, this doesn't make any sense to me, since I have appended the path to file1.py
using the command sys.path.append('../DIR2')
.
Why does this happen when file1.py
, when file2.py
is in the same directory as myfile.txt
yet it throws an error?
sys.path
only affects how Python looks for modules. If you want toopen
a file,sys.path
is not involved. Youropen
is failing because you're not running the script from the directory that containsmyfile.txt
. – Hadfieldmyfile.txt
is in the same directory as the file trying to open itfile2.py
. And, like I said, if I just runfile2.py
alone it works fine. – CompositionDIR2
before runningfile2
that would explain the behavior you are seeing. If you're doing anything else, show us the exact steps. – Hadfieldopen
, notimport
. People searching on Google for how to import usingsys.path.append()
will find this post a waste of time - and that's where most of the traffic is probably coming from. – Wacky