Python-使用多个目录中的文件

时间:2013-02-23 06:43:19

标签: python import package

我意识到这可能被认为是其他一些问题的重复问题,但我现在花了一个多小时阅读各种页面和文档,但仍然不明白这里发生了什么。

我正在尝试在多个目录中使用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 个答案:

答案 0 :(得分:2)

这是Python程序员常年提出的问题。问题是Python不能很好地处理包内的脚本。在过去的几个版本中,情况有所改善,但在很多时候它仍然没有做正确的事情。

我认为最好的答案是限制运行test_some_file.py的位置,并使用Python解释器的-m参数。也就是说,更改为myproject上方的目录,然后运行python -m myproject.tests.test_some_file。这是唯一可以在不弄乱sys.path的情况下工作的方式。

这将允许您的任一导入行正常工作。 PEP 8目前建议始终使用绝对导入,因此第一个版本可能比使用..的相对版本更好。

答案 1 :(得分:0)

对于像您这样的情况,我将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