如何使用setuptools为Windows命令行安装python脚本?

时间:2016-02-23 00:03:45

标签: python windows pip setuptools

我一直在研究一个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

编辑1

我将此添加到我的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__

我很不确定我是否朝着正确的方向前进,程序已编译但是没有运气同样的命令

1 个答案:

答案 0 :(得分:0)

  1. 开发时,请确保所有脚本文件中的名称都包含“python”(#!/usr/bin/env python),这些脚本文件稍后应由用户直接执行,即使以后目标平台上的路径不同( https://docs.python.org/3/distutils/setupscript.html#installing-scripts)
  2. 如您所示,将所有用户可调用的脚本放入 scriptssetup 调用的 setup.py 参数(尽管我不会省略 .py 扩展名)。

一旦使用 pip install 安装在目标平台上,目标 shebang 就会被一个合适的替换,并且脚本被放置在找到它们的路径中。

如果用户正确设置了 Python,她应该能够在不预先添加 python 的情况下使用它们。

例如,对于 Windows,Python Launcher (py.exe) 应与 .py 文件相关联,这在 Python 设置期间可选择提供。要省略 .py 扩展名,.py 可以位于 PATHEXT 环境变量中。