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