2

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

我正在尝试使用多个目录中的 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.datsome_file.py.

4

2 回答 2

2

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

我认为最好的答案是限制你从哪里运行test_some_file.py,并使用 Python 解释器的-m参数。也就是切换到上面的目录myproject,然后运行python -m myproject.tests.test_some_file。这是唯一可以在不乱用的情况下工作的方法sys.path

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

于 2013-02-23T06:54:03.677 回答
1

对于像您这样的情况,我将目录添加some_file.pysys.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
于 2013-02-23T10:53:51.640 回答