gpt4 book ai didi

python - 运行 python unit-test 在要导入的正确目录中找不到我的文件

转载 作者:行者123 更新时间:2023-12-03 14:39:45 25 4
gpt4 key购买 nike

这就是我的代码在下面的代码框中的样子。当我运行它时, my_dir 和 network_json 的结果分别是:

my_dir: C:\Users\sepham\My Documents\LiClipse Workspace\sengtool_data_funnel

网络_json:

C:\Users\sepham\My Documents\LiClipse Workspace\sengtool_data_funnel\example_EventsOfInterestColumnAggregate.json

但是我的 test_json_networks.py 文件的项目目录结构如下:

C:\Users\sepham\Documents\LiClipse Workspace\sengtool_data_funnel\tests\test_networks

json_files_input = [
'example_EventsOfInterestColumnAggregate.json',
'example_EventsOfInterestConcatenate.json']
@pytest.mark.parametrize('network_json', json_files_input)
def test_network_jsons(network_json):

my_dir = os.path.dirname(os.path.abspath(network_json))
network_json = os.path.join(my_dir, network_json)

print my_dir
print network_json

with open(network_json) as jdata:
network = Network.load(json.load(jdata))

打印语句的结果:
======================== CAPTURED OUTPUT =========================
C:\Users\sepham\My Documents\LiClipse Workspace\sengtool_data_funnel
C:\Users\sepham\My Documents\LiClipse
Workspace\sengtool_data_funnel\example_EventsOfInterestColumnAggregate.json

问题是我需要为 Python 单元测试设置什么环境变量或设置,以便它可以在正确的目录中看到我的文件:

C:\Users\sepham\Documents\LiClipse Workspace\sengtool_data_funnel\tests\test_networks

顺便说一句,我正在使用 LiClipse IDE。

此外,这是运行 python unit-test 时的错误消息,因为它看不到我要导入的文件:
E IOError: [Errno 2] No such file or directory: 'C:\\Users\\sepham\\My 
Documents\\LiClipse
Workspace\\sengtool_data_funnel\\example_EventsOfInterestCo‌​
lumnAggregate.json'

File "C:\Users\sepham\My Documents\LiClipse
Workspace\sengtool_data_funnel\tests\test_networks\test_json‌​_networks.py",
line 58 IOError

如果我将要导入的文件放在下面的目录中,那么它可以正常工作:

C:\Users\sepham\My Documents\LiClipse Workspace\sengtool_data_funnel

最佳答案

总结您的问题:

您具有以下项目结构:

- sengtool_data_funnel (project root)
- tests
- test_networks
- test_json‌​_networks.py
- example_EventsOfInterestColumnAggregate.json
- example_EventsOfInterestConcatenate.json

运行测试时,工作目录为 sengtool_data_funnel而不是 sengtool_data_funnel/tests/test_networks , JSON 文件在哪里。因此,您遇到了异常。

为什么项目根目录是默认工作目录

通常,当您编写测试时,您会想要测试项目结构中的代码。 Python 将在工作目录中查找模块(当然还有已安装的包)。

如果您的工作目录不是项目根目录,那么您可能会开始发现很难加载不在该目录中的任何模块(例如,在父目录中)。即使是同一目录中的模块也可能有问题。那是因为绝对包结构不再匹配您的项目结构。你最终可能会使用修改 sys.path 之类的技巧。 .

这就是为什么默认工作目录是项目根目录的原因,它应该保持这种状态。

你能做什么?

现在假设工作目录确实是项目根目录,我们有几个选择。

首先,您可以简单地加载 sengtool_data_funnel/tests/test_networks/example_EventsOfInterestConcatenate.json而不是 example_EventsOfInterestConcatenate.json
或者,您可以加载相对于您的测试脚本的文件。 Python 定义 __file__为您的测试脚本。即 os.path.dirname(__file__)在这种情况下会指向 sengtool_data_funnel/tests/test_networks .您可以将脚本更改为:
my_dir = os.path.dirname(__file__)
network_json = os.path.join(my_dir, network_json)

这样做的好处是,如果您更改了工作目录,它仍然可以工作(尽管我不知道您为什么要这样做)。

关于python - 运行 python unit-test 在要导入的正确目录中找不到我的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44013195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com