[英]Python Imports in test directory
首先,我知道这个问题已经被问了 1000 次,但我似乎找不到一个有效的答案,如果这是重复的话,很抱歉,如果你知道一个可以回答这个问题的问题,请分享。
我有以下目录结构:
my_app_dir
├── my_app
│ ├── __init__.py
│ ├── main.py
│ ├── services
│ │ ├── __init__.py
│ │ └── my_service.py
│ └── objects
└── testing
├── service_tests
│ ├── __init__.py
│ └── test_my_service.py
└── __init__.py
我试图将 my_service 从./my_app_dir/my_app/services/my_service.py 导入我的测试用例 class test_my_service.py in./my_app_dir/testing/service_tests/my_service.py
我试图像这样在我的模块中导入它:
import unittest
from my_app.services.my_service import MyService
class MyTest(unittest.TestCase):
...
我收到一个错误:无法导入模块 my_app...
这里的转折是我试图在带有调试的 VS 代码中运行它。 我有以下launch.json:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"cwd": "${workspaceFolder}"
}
]
}
我确实尝试在 launch.json 中添加到 PYTHONPATH,如下所示:
"env":{
"PYTHONPATH":"${PYTHONPATH}C:my_app_dir\\my_app"
}
这个测试代码需要移植到其他机器上,所以我真的不想修改 sys 路径。
我如何导入模块和/或我使用的目录结构有问题吗?
谢谢!
我不确定为什么修改sys.path
会降低可移植性:
# my_app_dir/testing/service_tests/my_service.py
import sys, os
initial_sys_path = sys.path.copy()
PATH_TO_MYAPPDIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
sys.path.append(PATH_TO_MYAPPDIR)
from my_app.services.my_service import MyService
# If you really want to clean sys.path afterwards
sys.path = initial_sys_path
但是,也可以按照https://stackoverflow.com/a/61326547/6068769中的建议使用os.chdir
:
PATH_TO_MYAPPDIR = .... # same as above
os.chdir(PATH_TO_MYAPPDIR)
from my_app.services.my_service import MyService
最后,我不是VS用户,但是对于PYTHONPATH解决方案,我认为变量应该指向C:\my_app_dir
"env":{
"PYTHONPATH":"${PYTHONPATH}C:my_app_dir"
}
简单的问题得到简单的答案。 我在 launch.json 中错误地设置了 PYTHONPATH。 我将其更改为以下内容:
"env": {
"PYTHONPATH": "${workspaceRoot}"
}
如果这不是最好的方法,请纠正我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.