模块作为Python中没有.py的脚本?

1 python pip python-module setuptools

我想要一个包含名为'foobar'的代码的Python文件,该代码在安装软件包时作为脚本执行,如下所示:

$ foobar -i arg1 arg2
Run Code Online (Sandbox Code Playgroud)

foobar被声明为脚本setup.py.

foobar文件还包含由包中的其他模块导入的函数/类,因此有一个单独的文件quux.py导入foobar:

(in `quux.py`):
import mypackage
import mypackage.foobar as foobar
Run Code Online (Sandbox Code Playgroud)

如何在foobar没有.py扩展名的情况下保留并将其声明为脚本,setup.py但仍然可以将其作为模块从另一个文件中导入?这是正确的答案:导入没有.py扩展名的python模块, - 还是有另一种技巧?

lar*_*sks 5

一般来说,这里的解决方案是foobar.py作为模块保留,并使脚本简单如下:

import foobar
foobar.main()
Run Code Online (Sandbox Code Playgroud)

如果您正在使用setup.py(并且您可能应该)安装模块,您也可以通过console_scripts入口点执行此操作,如下所示:

entry_points={
    'console_scripts': [
        'foobar = foobar:main'
    ],
},
Run Code Online (Sandbox Code Playgroud)

这将安装一个foobar命令,该命令大致相当于本答案第一部分中的存根.