我有一个包含多个文件的python项目和一个使用argparse来解析参数的cmd.py,在其他文件中有关键函数。我想要做的是:我想这样做,如果在命令行中我放cmd -p hello.txt
它运行该python文件。
我想我可以简单地将cmd.py文件移动到某个地方,如/usr/bin/
或$PATH
中包含的其他目录,但是因为我有其他文件可以使用我的cmd.py
,所以我的/usr/bin
中会有多个文件。
我能做的另一件事是在cmd.py
和/usr/bin/cmd
之间建立一个象征性的联系:ln -s /path/to/cmd.py /usr/bin/cmd
,但那我在哪里放cmd.py?这是最好的做法吗?
注意:我打算将其用于Linux和MacOS X,而不是Windows
通常的方法是在setup.py
中定义一组入口点,让包装基础设施为您完成繁重的工作。
setup(
# ...
entry_points = {
'console_scripts': ['cmd = cmd:main'],
}
)
这需要setuptools
。
以下是该设施的一些文档:https://python-packaging.readthedocs.io/en/latest/command-line-scripts.html
首先,我不建议在/usr/bin
中安装,因为这是系统程序的用武之地。 /usr/local/bin
或添加到$PATH
的其他自定义目录可能是合适的。
至于让它像典型的程序一样运行,无论你把它放在哪里都命名为cmd
,因为扩展名不是必需的,并将这一行添加到程序的顶部:
#!/usr/bin/env python
(如果要确保使用Python 3.x,可能需要指定python3
而不仅仅是python
。)
然后它可以用chmod +x <path to your program>
执行。确保您具有执行此操作所需的权限(即可能需要sudo
)。