【发布时间】:2017-03-17 21:32:55
【问题描述】:
假设我有一个结构如下的 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'
但是,如果我从 package 目录运行 module.py,则不会出现错误。所以似乎open(...) 中使用的相对路径仅相对于原始文件的运行位置(即__name__ == "__main__")?我不想使用绝对路径。有什么方法可以解决这个问题?
【问题讨论】:
-
作为旁注,引用 PEP8:“非常不鼓励使用相对导入进行包内导入。始终对所有导入使用绝对包路径。” 这里,
from package.module import test。
标签: python python-3.x io relative-path python-import