将函数从位于父文件夹中的模块导入脚本

普莱斯·特纳

我知道导入是一个常见的问题,但其他解决方案都不适合我。

尝试从脚本的父文件夹内的模块导入函数时,出现 ModuleNotFoundError 错误。这是文件夹结构。

  • 蟒蛇工具
    • 命令行
      • cli_script.py
    • 实用程序.py

cli_script.py:

from python_tools.utils import foo

def bar():
   foo()

if __name__ == "__main__": 
    bar()

工具.py:

def foo():
    return x

def foo2():
    return y

当我点击“运行”时,这在 PyCharm 中有效,但是在使用python3 cli_script.py.

我也试过python3 -m cli_script.py这是同样的错误:ModuleNotFoundError: No module named 'python_tools'

从其他答案中,我认为这与我的sys.path. 他们大多建议在脚本中以某种方式修改它,但这似乎是 hacky / non-pythonic。

这个想法是有一个带有一堆函数的模块,然后将这些函数以配方样式导入到一堆工具中,这些工具被隔离到不同的目录中。所有这些工具都将是脚本(如果 _name__ == _main__)。

请让我知道是否有更好的目录结构,或者如果没有 hacky 解决方法就不可能。

谢谢!

约翰·亨尼格

首先,这竟一下子你的工作pip install你的包,甚至是用尽可能少的--editable选项用于本地测试。因为 Python 解释器将能够python_tools在模块搜索路径上找到您的包 ,并从那里获取它。

我不知道似乎正在发生的 PyCharm 魔法。但是,是的,您可以“手动”将父文件夹添加到模块搜索路径中。例如,像这样:

import sys
sys.path.append('..')

通常会这样做。如果相对路径..没有切断它,或者看起来太“hacky”,您还可以从预定义的__file__属性中获取脚本的绝对路径,并使用 fromos.path或方法 from pathlib(并转换strappendto sys.path) .

更好的目录结构可能是与utils.py命令行脚本位于同一文件夹中,或者在子文件夹中作为包内的模块。那是因为脚本的目录,当被解释器直接执行时,总是在模块搜索路径上。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将模块从子文件夹导入到父文件夹

从python中的父文件夹导入

将文件复制到S3中的文件夹最终位于父文件夹

将父文件夹中的导入文件夹上移一级

Python导入语句。ModuleNotFoundError:运行测试并引用父文件夹中的模块时

从同一父目录中的其他文件夹导入模块时出错

如何包含位于子文件夹中的公共模块

如何从python的父文件夹导入函数?

为什么__init__.py将文件夹中的所有文件作为模块导入?

将工作目录设置为R中脚本文件的父文件夹

从其他文件夹导入模块:如何在Spyder或PyCharm中显示函数参数?

尝试将父文件夹中的类作为包导入

文件位于不同文件夹时导入模块时出现问题

通过脚本将文件夹中的特定文件格式导入Illustrator

Python:如何将文件夹作为模块导入

Python-将模块导入文件夹之外

Shell脚本将所有文件从子文件夹移动到父文件夹

如何还原Idea中模块的父文件夹

htaccess - 将父文件夹重定向到父文件夹中的文件

无法从Jupyter-lab笔记本和pathlib.Path导入父文件夹中的模块

用于将子文件夹“提取”到父文件夹的脚本

从Python中的相邻文件夹导入模块

将CMake项目(libRocket)打包到.deb中,但是构建脚本位于子文件夹中

批处理脚本可根据当前的父名称将特定的子文件夹移动到新的父文件夹中

如何将文件夹中的所有文件作为模块导入并将所有文件作为对象导出?

将文件移动到CMD中的父文件夹

从子文件夹导入模块

从子文件夹导入模块

模块和导入文件夹问题