Python 3.x 从上面的文件夹导入python文件时出现问题
我知道这方面有很多问题和答案,我尝试了很多链接,但这些似乎都没有帮助 我的项目结构是:Python 3.x 从上面的文件夹导入python文件时出现问题,python-3.x,Python 3.x,我知道这方面有很多问题和答案,我尝试了很多链接,但这些似乎都没有帮助 我的项目结构是: volume_price_analysis/ README.md TODO.md build/ docs/ requirements.txt setup.py vpa/ __init__.py database_worker.py utils.py test/ __init__.py test_utils.py i
volume_price_analysis/
README.md
TODO.md
build/
docs/
requirements.txt
setup.py
vpa/
__init__.py
database_worker.py
utils.py
test/
__init__.py
test_utils.py
input/
input_file.txt
我想在测试中加载utils.py\u utils.py
我的test_utils.py是:
import unittest
import logging
import os
from .vpa import utils
class TestUtils(unittest.TestCase):
def test_read_file(self):
input_dir = os.path.join(os.path.join(os.getcwd()+"/test/input"))
file_name = "input_file.txt"
with open(os.path.join(input_dir+"/"+file_name)) as f:
file_contents = f.read()
f.close()
self.assertEqual(file_contents, "Hello World!\n")
if __name__ == '__main__':
unittest.main()
我想运行(比如在test
文件夹中):
我不能这样做,我得到了一堆关于UTIL导入的错误(尝试了很多次迭代,没有,从这个导入等等)
为什么这么复杂
如果有帮助的话,我正在使用Python 3.7。根据答案,您可以使用importlib
在
spec=importlib.util.spec\u from_file_location(“module.name”,“/path/to/file.py”)
中,您可以使用。/utils.py
,而不是path/to/file
,另外,因为您已经在导入名为utils的包(来自importlib),您应该使用其他名称来调用其中一个,即不要将module.name保留为utils或将importlib.utils导入为其他名称。我发现,python更喜欢您从顶级文件夹运行代码,在我的例子中,我所要做的就是制作一个shell脚本来调用
python3-m单元测试vpa.test.test\u utils
在test_utils
内部,只要我记得我正在从主文件夹执行代码,就可以导入任何我想要的内容,这样加载utils.py
就可以了
来自vpa导入utils
内部测试utils
python3 -m test_utils.py