Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to import files in python using sys.path.append?

Tags:

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 makes no 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? Thank you.

like image 452
makansij Avatar asked Aug 27 '15 01:08

makansij


1 Answers

You can create a path relative to a module by using a module's __file__ attribute. For example:

myfile = open(os.path.join(     os.path.dirname(__file__),     MY_FILE)) 

This should do what you want regardless of where you start your script.

like image 54
larsks Avatar answered Sep 19 '22 20:09

larsks