Python3.6错误:ModuleNotFoundError:没有名为“ src”的模块

时间:2018-06-26 18:50:53

标签: python-3.6 python-unittest

我知道之前也曾问过类似的问题...但是我有一个很快的疑问... 我一直在关注此链接:https://www.python-course.eu/python3_packages.php

我的代码结构:

my-project
  -- __init__.py
  -- src
      -- __init__.py
      -- file1.py
  -- test
      -- __init__.py
      -- test_file1.py

test_file1.py:

import unittest
from src.file1 import *

class TestWriteDataBRToOS(unittest.TestCase):
    def test_getData(self):
    sampleData = classInFile1()
    sampleData.getData()
    self.assertNotEqual(sampleData.usrname, "")

if __name__ == '__main__':
    unittest.main()

我在这里得到错误:

ModuleNotFoundError: No module named 'src'

如果我更改为:

import sys
sys.path.insert(0, '../src')
import unittest
from file1 import *

然后它起作用了!

有人可以帮助我理解为什么它无法像上面粘贴的链接中所描述的那样起作用,或者以任何其他方式代替写sys.path.insert(0, '../src')语句。

谢谢!

编辑:

从我的项目目录执行后:`python -m unittest test / test_file1 / TestWriteDataBRToOS我得到了上面更新的错误。

Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/usr/lib/python2.7/unittest/__main__.py", line 12, in <module>
main(module=None)
File "/usr/lib/python2.7/unittest/main.py", line 94, in __init__
self.parseArgs(argv)
File "/usr/lib/python2.7/unittest/main.py", line 149, in parseArgs
self.createTests()
File "/usr/lib/python2.7/unittest/main.py", line 158, in createTests
self.module)
File "/usr/lib/python2.7/unittest/loader.py", line 130, in loadTestsFromNames
suites = [self.loadTestsFromName(name, module) for name in names]
File "/usr/lib/python2.7/unittest/loader.py", line 91, in loadTestsFromName
module = __import__('.'.join(parts_copy))
ImportError: Import by filename is not supported.

3 个答案:

答案 0 :(得分:7)

您必须从my-project文件夹而不是test文件夹运行测试。

python -m unittest test.test_file1.TestWriteDataBRToOS

答案 1 :(得分:2)

这是因为它无法找到名为“ src”的模块,可能是因为未正确指定“ src”文件夹的路径。如果您直接编写src.file1,则您的“ src”文件应该位于当前python文件(test_file1.py)所在的目录中。如果不在同一目录中,则必须指定整个目录。 sys.path.insert(0, '../src')起作用的原因是因为..会将您上移一个目录,而这就是您的src文件夹所在的位置。如果您的test_file1.py工作目录为/ usr / bin / python,则src文件夹的位置为/ usr / bin / src,并且由于它与当前工作目录不同,因此python文件不是能够找到“ src”模块。

答案 2 :(得分:1)

你也可以这样做:

<块引用>

导出 PYTHONPATH="${PYTHONPATH}:/path/to/your/project/"

或在 Windows 中:

<块引用>

设置 PYTHONPATH="${PYTHONPATH}:/path/to/your/project/"