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