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

时间:2014-01-21 18:13:52

标签: python pip setuptools python-module

我希望有一个名为'foobar'的Python文件,当安装软件包时,它将作为脚本执行,如下所示:

$ foobar -i arg1 arg2

foobarsetup.py中声明为脚本。

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

(in `quux.py`):
import mypackage
import mypackage.foobar as foobar

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

1 个答案:

答案 0 :(得分:5)

一般来说,这里的解决方案是将foobar.py作为模块,让脚本简单:

import foobar
foobar.main()

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

entry_points={
    'console_scripts': [
        'foobar = foobar:main'
    ],
},

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