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

柔情痞子 提交于 2020-01-09 19:15:31

问题


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.


回答1:


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.




回答2:


Replace

MY_FILE = "myfile.txt"
myfile = open(MY_FILE) 

with

MY_FILE = os.path.join("DIR2", "myfile.txt")
myfile = open(MY_FILE) 

That's what the comments your question has are referring to as the relative path solution. This assumes that you're running it from the dir one up from myfile.txt... so not ideal.

If you know that my_file.txt is always going to be in the same dir as file2.py then you can try something like this in file2..

from os import path

fname =  path.abspath(path.join(path.dirname(__file__), "my_file.txt"))
myfile = open(fname)


来源:https://stackoverflow.com/questions/32239372/how-to-import-files-in-python-using-sys-path-append

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!