【发布时间】:2016-06-04 15:08:45
【问题描述】:
我一直在开发一个 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__
我很不确定我是否朝着正确的方向前进,程序编译但没有运气使用相同的命令
【问题讨论】:
-
对 Windows 最好的做法是进行设置,以便人们可以通过
py [-X[.Y[-32]]] -m ytsdl运行您的脚本。为此,请将__main__.py脚本添加到包中。您可以让脚本运行ytsdl.main函数。这个main函数也是automatic script creation 的入口点。这将在 Windows 上创建脚本和 EXE。 “脚本”目录通常不在搜索PATH上,但它会用于活动的venv环境。 -
那么我基本上是想将我在 youtube-song-downloader 脚本中的内容放入 ytsdl 的主函数中,然后为其设置入口点吗?如果我对 console_script 的
package.module:method部分的语法有点困惑 -
将
main放入您的__init__.py。那么控制台脚本入口点是'youtube-song-downloader=ytsdl:main'。不要忘记与py -m ytsdl或python -m ytsdl一起使用的__main__.py脚本。 -
这是
entry_points,而不是entrypoints。main函数位于__init__.py模块中。__main__.py导入ytsdl并调用ytsdl.main()。 -
这篇文章对如何打包命令行 Python 包有一个很好的整体解释:gehrcke.de/2014/02/… 还有一个示例 repo:github.com/jgehrcke/python-cmdline-bootstrap 两者都对我很有帮助。
标签: python windows pip setuptools