我知道以前也有人问过类似的问题...但我很快就有了疑问... 我一直在关注此链接: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.
您必须从
my-project
文件夹运行测试,而不是从 test
文件夹运行。
python -m unittest test.test_file1.TestWriteDataBRToOS
你也可以这样做:
导出 PYTHONPATH="${PYTHONPATH}:/path/to/your/project/"
或在 Windows 中:
设置 PYTHONPATH="${PYTHONPATH}:/path/to/your/project/"
消除此错误的最佳方法:
1- 创建 .env 文件并在该文件中添加以下行:
export PYTHONPATH="$PYTHONPATH:$PWD"
保存文件并退出。
2- 在代码的当前目录中打开终端并运行:
set -a
source .env
这是因为它无法找到名为“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”模块。
在终端中运行此命令:python setup.py install