Скажем, у меня есть проект python, который структурирован следующим образом:
project
/data
test.csv
/package
__init__.py
module.py
main.py
__init__.py
:
from .module import test
module.py
:
import csv
with open("..data/test.csv") as f:
test = [line for line in csv.reader(f)]
main.py
:
import package
print(package.test)
Когда я запускаю main.py
, я получаю следующую ошибку:
C:\Users\Patrick\Desktop\project>python main.py
Traceback (most recent call last):
File "main.py", line 1, in <module>
import package
File "C:\Users\Patrick\Desktop\project\package\__init__.py", line 1, in <module>
from .module import test
File "C:\Users\Patrick\Desktop\project\package\module.py", line 3, in <module>
with open("../data/test.csv") as f:
FileNotFoundError: [Errno 2] No such file or directory: '../data/test.csv'
Однако, если я запускаю module.py
из каталога package
, я не получаю ошибок. Таким образом, кажется, что относительный путь, используемый в open(...)
, относится только к тому, где выполняется исходный файл (i.e __name__ == "__main__"
)? Я не хочу использовать абсолютные пути. Каковы некоторые способы борьбы с этим?