Python - 在多个目录中处理文件
我知道这个问题可能和其他一些问题重复,但我花了一个多小时在各种页面和文档上阅读,还是搞不清楚到底发生了什么。
我想在多个文件夹中处理python文件;我基本上有这样的结构:
myproject/
__init__.py
some_file.py
some_data.dat
tests/
__init__.py
test_some_file.py
test_some_file.py
是从命令行运行的,正如名字所示,它是用来运行 some_file.py
中的代码,并且需要导入它。但是,我似乎无法做到这一点。
我试过:
from myproject import some_file
还有
from .. import some_file
我确实通过使用 sys.path
让它运行起来了,但根据我所读到的,这似乎不是正确的方法。
其次,当我使用 sys.path
让它运行时,我收到了一个错误,提示找不到 some_data.dat
,这个文件是 some_file.py
使用的。
2 个回答
1
对于像你这样的情况,我会把 some_file.py
所在的文件夹添加到 sys.path
中(这是临时的)。
代码:
import sys, os
dirname = os.path.dirname( # going up by 1 directory
os.path.dirname( # going up by 2 directories
sys.argv[0]))
sys.path.append(dirname)
import some_test
2
这是一个Python程序员常常遇到的问题。问题在于,Python在处理包里面的脚本时表现得不太好。虽然最近几个版本有所改善,但很多时候它还是不能正确运行。
我认为最好的解决办法是限制你运行test_some_file.py
的地方,并使用Python解释器的-m
参数。也就是说,你需要切换到myproject
的上一级目录,然后运行python -m myproject.tests.test_some_file
。这样做是唯一一种不需要调整sys.path
的有效方法。
这样一来,你的导入语句就能正常工作了。PEP 8目前建议始终使用绝对导入,所以第一种方式可能比使用..
的相对导入更好。