导入python函数给出ModuleNotFoundError [重复]

Posted

技术标签:

【中文标题】导入python函数给出ModuleNotFoundError [重复]【英文标题】:Importing python function gives ModuleNotFoundError [duplicate] 【发布时间】:2020-05-08 04:33:53 【问题描述】:

求救!

我创建了一个函数并尝试将其导入另一个 python 脚本以进行一些单元测试。但是,我不断收到“ModuleNotFoundError”。如何正确地将函数从一个脚本导入到另一个脚本。

现有:

from src.somefile import some_function

def test_somefunction:
    assert somefunction()

错误

Traceback (most recent call last):
  File "test/test_file.py", line 2, in <module>
    from src.somefile import convert_epoch
ModuleNotFoundError: No module named 'src'

文件夹结构

project/
project/__init__.py
project/src
project/src/__init__.py
project/src/somefile.py
project/test
project/test/__init__.py
project/test/test_file.py

如果有人能强调我做错了什么以及我如何巧妙地进行导入,我将不胜感激。谢谢!

【问题讨论】:

是的。我在我的项目目录中运行它作为 python test/test_file.py 这能回答你的问题吗? Importing files from different folder 【参考方案1】:

希望这对你有用,假设你正在像这样运行你的脚本python test/test_file.py

import sys
sys.path.append("..") # Adds higher directory to python modules path.

from src.somefile import some_function

def test_somefunction:
    assert somefunction()

【讨论】:

【参考方案2】:

如果你想导入这样的模块,你必须将包含你的模块的目录添加到PYTHONPATH 环境变量或者你可以使用sys.path

import sys
# assumed that /home/you/work contains `project` dir
sys.path.append('/home/you/work')
# now you can import

您也可以使用相对导入 (import ..package),但它们有一些限制(您可以达到一定程度)并且通常是不好的做法。看看这篇文章,它详细描述了python的import语句:https://chrisyeh96.github.io/2017/08/08/definitive-guide-python-imports.html

【讨论】:

谢谢。这有帮助!

以上是关于导入python函数给出ModuleNotFoundError [重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 printf() 在 python 中给出一个奇怪的输出?

Python Sklearn.Model_Selection 给出错误无法导入梳子

在标准输入上使用相对导入的Python 3脚本给出错误:没有名为'__main__.XXX'的模块; '__main__'不是包

Cython 导入工作一次 - 然后给出 gcc.bat 错误

python3导入当前目录模块里的函数出错

PyImport_Import 找不到模块