Python3.6错误:模块未找到:找不到名为'src'的模块。

46

我知道类似的问题之前已经被问过了...但是我有一个小疑问...

我一直在关注这个链接:https://www.python-course.eu/python3_packages.php

我的代码结构:

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

测试文件1.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')语句之外是否有其他替代方法。

谢谢!

编辑:

在执行从my-project目录: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.
5个回答

41

你需要从my-project文件夹中运行测试,而不是从test文件夹中运行测试。

python -m unittest test.test_file1.TestWriteDataBRToOS

22

你也可以这样做:

在Linux或macOS中,输入以下命令:
export PYTHONPATH="${PYTHONPATH}:/path/to/your/project/"

在Windows中,输入以下命令:
set PYTHONPATH="${PYTHONPATH}:/path/to/your/project/"

其中"/path/to/your/project/"是你的项目所在路径。


你可以使用 pwd 命令获取当前路径,然后进入项目根目录,再次使用 pwd 命令获取目录并使用它。 - Caridorc

9

摆脱此错误的最佳方法:

1- 创建 .env 文件并在该文件中添加以下行:

export PYTHONPATH="$PYTHONPATH:$PWD"

保存文件并退出。

2- 在代码的当前目录中打开终端并运行:

set -a
source  .env

6
这是因为它无法定位名为“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
是的,我明白...但只有当我通过Ubuntu虚拟机上的终端运行代码时才会出现这个错误,当我在我的本地主机MAC上使用IDE 'pycharm'运行时,它就可以正常工作! - user3868051
1
因为你的IDE已经将该路径添加到其sys.path中。您可以通过打印出您的sys.path和pythonpath来检查它。 - GuSuku

-1

这是我的文件夹结构

在尝试从training.py中的common.py文件中提取fun时,我遇到了src模块错误的错误。代码如下:from src.utils.common import read_config 然后我尝试了这个:from utils.common import read_config 它可以正常工作。


我刚刚从代码中删除了src。 - Shubham Chitaguppe
2
您的回答目前不够清晰。请进行[编辑]以添加更多细节,帮助其他人了解它如何回答所提出的问题。您可以在帮助中心找到有关撰写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接