模块作为Python中没有.py的脚本?
Posted
技术标签:
【中文标题】模块作为Python中没有.py的脚本?【英文标题】:module as script without .py in Python? 【发布时间】:2014-02-11 12:15:52 【问题描述】:我想要一个 Python 文件,其中包含名为 'foobar' 的代码,该文件旨在在安装包时作为脚本执行:
$ foobar -i arg1 arg2
foobar
在setup.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, -- 还是有其他窍门?
【问题讨论】:
【参考方案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
方法,因为它会在后台为您处理依赖于操作系统的事情。以上是关于模块作为Python中没有.py的脚本?的主要内容,如果未能解决你的问题,请参考以下文章
我该如何解决这个问题? mod_wsgi (pid=3445): 目标 WSGI 脚本 '/www/folder/index.py' 不能作为 Python 模块加载