我知道导入是一个常见的问题,但其他解决方案都不适合我。
尝试从脚本的父文件夹内的模块导入函数时,出现 ModuleNotFoundError 错误。这是文件夹结构。
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
(并转换str
为append
to sys.path
) .
更好的目录结构可能是与utils.py
命令行脚本位于同一文件夹中,或者在子文件夹中作为包内的模块。那是因为脚本的目录,当被解释器直接执行时,总是在模块搜索路径上。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句