我正在为一些脚本构建一个简单的python3 CLI。我在导入位于同一模块中的文件中的我自己的函数时遇到了麻烦。
我的文件结构是
pycli/
├── README.md
├── pycli
├── __init__.py
├── cli.py
└── funcmodule.py
字符串funcmodule.py
:
def my_function(word):
print("Hello %s" % word)
型cli.py
:
#!/usr/bin/env python3
from pycli.funcmodule import my_function
def main():
my_function('hello world')
if __name__ == '__main__':
main()
型
当我从命令行运行./pycli/cli.py
时,
(venv) ➜ ./pycli/cli.py
Traceback (most recent call last):
File "./pycli/cli.py", line 3, in <module>
from pycli.funcmodule import my_function
ModuleNotFoundError: No module named 'pycli'
型
当我从PyCharm或Visual Studio Code运行cli.py
时,它可以正常工作。用python3+导入函数的正确方法是什么(我不关心python2)?
2条答案
按热度按时间cmssoen21#
这是运行程序的方式和导入的设置方式之间的不匹配。导入的设置就好像有一个包涉及一样,但是运行程序的过程就像没有包一样。
按照运行程序的方式,内部
pycli
文件夹的内容都是顶级模块,没有pycli
包。要将程序作为包子模块运行,您需要从pycli
包可导入的某个地方执行此操作(实际上,该包位于pycli
外部文件夹内,但如果您安装了包,则可以位于任何地方),并且您需要运行字符串
x6492ojm2#
所以我需要用
setup.py
创建一个合适的包:字符串
以便在终端上运行
型