Python - 在多个目录中处理文件

2 投票
2 回答
1948 浏览
提问于 2025-04-17 16:51

我知道这个问题可能和其他一些问题重复,但我花了一个多小时在各种页面和文档上阅读,还是搞不清楚到底发生了什么。

我想在多个文件夹中处理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目前建议始终使用绝对导入,所以第一种方式可能比使用..的相对导入更好。

撰写回答