在创建Python包时,实际的顶级命令通常安装在路径文件夹中,例如/usr/local/bin。为了让它引用所有相关的包模块,需要用包名称显式地限定它们:
import package.module并显式地调用
package.module.function(args)在大型包中,随着argparse的广泛使用,包中可能会有数百个对函数和变量的引用,当从/usr/local/bin/cmd.py引用这些函数和变量时,所有这些引用都需要使用包名称进行限定。这对于生产使用来说很好,但在开发过程中却很痛苦,因为每次测试更改时都需要重新安装包。(即,它只能在该显式位置找到模块。
因此,最后,对于我的问题:-命令本身(/usr/local/bin/cmd.py)是否可以是一个存根,它只导入包中的一个模块,其中包含argparser及其定义?
使用这种方法,所有模块(存根除外)都位于包目录中,包内引用将找到所有其他模块,而不需要显式地在模块上声明包名。
发布于 2014-03-19 21:20:27
是的,setuptools.setup(名为entry_points的参数接受一个字典和名为console_scripts的键为您做这件事。
setuptools.setup(
...
entry_points={'console_scripts': ['mycmd = mycmd:main']},
)这将在bin目录(system或virtualenv)中创建一个名为mycmd的脚本,该脚本加载mycmd模块并在被调用时执行其main函数。
http://pythonhosted.org//setuptools/setuptools.html#automatic-script-creation
发布于 2014-03-19 21:12:37
嗨,我不认为这是一个明确的答案,但它可能值得你看看:
How can I install Python modules programmatically / through a Python script?
希望能为您的问题提供一些见解和潜在的解决方案
谢谢,//P
https://stackoverflow.com/questions/22506246
复制相似问题