【问题标题】:module as script without .py in Python?模块作为Python中没有.py的脚本?
【发布时间】:2014-02-11 12:15:52
【问题描述】:

我想要一个 Python 文件,其中包含名为 'foobar' 的代码,该文件旨在在安装包时作为脚本执行:

$ foobar -i arg1 arg2

foobarsetup.py 中被声明为脚本。

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

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

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

【问题讨论】:

    标签: python pip setuptools python-module


    【解决方案1】:

    一般来说,这里的解决方案是将foobar.py 保留为一个模块,并让脚本变得如此简单:

    import foobar
    foobar.main()
    

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

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

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

    【讨论】:

    • 无论用户端的 pip/easy_install/distribute 如何,这两种解决方案中的哪一种更有可能始终有效?我想要一个最不可能破坏的,因为两者都很容易在代码方面进行
    • 执行entry_points 方法,因为它会在后台为您处理依赖于操作系统的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    相关资源
    最近更新 更多