我一直在研究一个python命令行应用程序,我想从Windows上的命令提示符以及OSX和linux上的终端运行。 我的目标是创建一个pip模块,允许我的应用程序在安装后在命令行上可用。
使用安装工具我可以使用以下命令在Linux和OSX上运行脚本:
youtube-song-downloader <search query>
:
python setup.py install
通过pip
安装后也可以直接使用但是当我尝试在Windows上使用相同的setup.py时,它无法识别该命令(可能它没有添加到路径中)
如何通过pip install或setup.py install在windows命令行上使用我的脚本?
我的setup.py:
#!/usr/bin/env python
from setuptools import setup
setup(name='youtube-song-downloader',
version='0.1',
description='A program used to search and download songs from Youtube.',
url='https://github.com/dszopa/youtube-song-downloader',
author='Daniel Szopa',
author_email='dszopa@iastate.edu',
license='MIT',
install_requires=[
'youtube_dl',
'google-api-python-client',
'pytest',
],
packages=['ytsdl'],
scripts=['bin/youtube-song-downloader'],
include_package_data=True,
zip_safe=False)
我的程序结构如下:
+ bin
- youtube-song-downloader
+ tests
+ ytsdl
- songDownloader.py
- settings.json
- .gitignore
- MANIFEST.in
- requirements.txt
- setup.py
如果您对我的代码有任何疑问,我的github回购是here
我将此添加到我的setup.py
entrypoints={
'console_scripts': [
'youtube-song-downloader = ytsdl:main',
]
},
我还创建了__main__.py
:
#!/usr/bin/env python
import sys
import os
import ytsdl
if __name__ == "__main__":
main()
def main():
#script from bin/youtube-song-downloader
并将__main__
添加到我的__init__
from .ytsdl import __main__
我很不确定我是否朝着正确的方向前进,程序已编译但是没有运气同样的命令
答案 0 :(得分:0)
#!/usr/bin/env python
),这些脚本文件稍后应由用户直接执行,即使以后目标平台上的路径不同( https://docs.python.org/3/distutils/setupscript.html#installing-scripts)scripts
中 setup
调用的 setup.py
参数(尽管我不会省略 .py
扩展名)。 一旦使用 pip install
安装在目标平台上,目标 shebang 就会被一个合适的替换,并且脚本被放置在找到它们的路径中。
如果用户正确设置了 Python,她应该能够在不预先添加 python
的情况下使用它们。
例如,对于 Windows,Python Launcher (py.exe
) 应与 .py
文件相关联,这在 Python 设置期间可选择提供。要省略 .py
扩展名,.py
可以位于 PATHEXT
环境变量中。