我已经看过各种各样的例子和其他类似的问题,但我似乎无法找到一个与我的场景完全匹配的例子.我觉得这总是一个问题,因为有很多类似的问题,但我似乎无法让这个工作"正确".这是我的项目:
user_management (package)
|
|------- __init__.py
|
|------- Modules/
| |
| |----- __init__.py
| |----- LDAPManager.py
| |----- PasswordManager.py
|
|------- Scripts/
| |
| |----- __init__.py
| |----- CreateUser.py
| |----- FindUser.py
Run Code Online (Sandbox Code Playgroud)
如果我将"CreateUser.py"移动到主user_management目录,我可以轻松地使用:"import Modules.LDAPManager"导入LDAPManager.py ---这可行.我不能做的(我想做的)是将CreateUser.py保存在Scripts子文件夹中,然后导入LDAPManager.py.我希望通过使用来实现这一目标"import user_management.Modules.LDAPManager.py".这不起作用.简而言之,我可以让Python文件轻松地在层次结构中更深入地查看,但是我无法获得Python脚本来引用一个目录而不是另一个目录.
请注意,我能够使用以下方法解决我的问题:
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
import Modules.LDAPManager as LDAPManager
Run Code Online (Sandbox Code Playgroud)
我听说这是不好的做法而且气馁.
脚本中的文件是直接执行的(脚本中的init .py甚至是必要的吗?).我已经读过,在这种情况下,我应该使用-m标志执行CreateUser.py.我已经尝试了一些变体,似乎无法让CreateUser.py识别LDAPManager.py.
pytest建议包含一个额外的目录来分隔项目中的源代码:
my_package
??? src # <-- no __init__.py on this layer
? ??? my_package
? ??? __init__.py
? ??? util_module
? ??? __init__.py
? ??? utils.py
??? tests
??? __init__.py
??? test_util_module
??? __init__.py
??? test_utils.py
Run Code Online (Sandbox Code Playgroud)
可悲的是,他们没有说1关于测试代码中的导入应该如何在这种情况下工作,这对于我的IDE在这个天真的例子2中工作得很好,但是导致pytest出现以下错误:
my_package $ pytest
====================== test session starts ======================
platform linux -- Python 3.6.4, pytest-3.5.1, py-1.5.3, pluggy-0.6.0
rootdir: /home/user/workspace/my_package, inifile:
collected 0 items / 1 errors
============================ ERRORS =============================
___ ERROR collecting tests/test_util_module/test_utils.py ___
ImportError while importing test …Run Code Online (Sandbox Code Playgroud)