Closed mengmo closed 7 years ago
另外再说一下另一个问题,现在pip
装好后/extractors
目录下还是一个/le
目录,一个/letv
目录,还有一个douyu.py
,一个douyutv.py
,难道这个改动https://github.com/zhangn1985/ykdl/commit/f6a92d2b63291d39ad3ffa3e96d3cb01ca63d7e4 对这俩无效。而且还有一个/douyu
目录,这我就看不懂了。
pip包的问题是我在做python wheel的时候犯了一个错误。
我把上边给出的几段代码要描述的问题具体说一下
在正常安装Python
的情况下(.py
在PATHEXT
内,.py
.pyc
.pyo
.pyw
的文件关联也正常)
将\Scripts\ykdl.py
复制成了\Lib\site-packages\ykdl\__main__.py
然后将\Scripts\ykdl.py
内的代码替换成我上边写的
再在任何目录下执行
ykdl [option ...] video_urls
不会出错,这也就没有了这里https://github.com/zhangn1985/ykdl/issues/65 的问题
我还以上边的you-get.py
和youtube-dl.py
替换了\Scripts
目录下的you-get.exe
和youtube-dl.exe
,同样没有问题
我在msys2
下做了测试同样没有问题,而且实际情况是Shell脚本
可以不要扩展名
我还在msys2
下还装了youtube_dl
,装好后打开/usr/bin/youtube_dl
,里边是这样的
#!/usr/bin/python2
# -*- coding: utf-8 -*-
import re
import sys
from youtube_dl import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(main())
Linux下应该差不多吧,顺便有兴趣的话也可以看看 you-get 的
这个改动 https://github.com/zhangn1985/ykdl/commit/fc251875094c162d10426e228a3633159f9c1699
ykdl/main.py → bin/ykdl.py
https://github.com/zhangn1985/ykdl/issues/20 使得 pip 安装后的
'ykdl' is a package and cannot be directly executed
出现未知原因的错误 https://github.com/zhangn1985/ykdl/issues/65
ykdl.py: error: the following arguments are required: video_urls
使用上不方便 https://github.com/zhangn1985/ykdl/issues/65
发现 python "C:\Python35\Scripts\ykdl.py" http://www.iqiyi.com/v_19rracw19g.html 这样是可以下载的,但是这也太... 应该是我的打开方式不对,还是请问正确的使用方式是什么?
https://github.com/zhangn1985/ykdl/issues/76
现在就只能通过下面这种方式使用了,感觉好憋扭 C:\Users\i>Python C:\Users\i\AppData\Local\Programs\Python\Python35-32\Scripts\ykdl.py
https://github.com/zhangn1985/ykdl/issues/76#issuecomment-285926766
我在Linux上面pip安装后也不能直接用,用 Python3 /usr/local/bin/ykdl.py -j http://www.tudou.com/listplay/HXTEm-Oxufc/QjrcnlhEflU.html 才行
要是能够统一起来都用ykdl就方便了 你可以alias ykdl=ykdl.py
个人看法
这个改动唯一可能算是好处的地方是在 Windows 系统上\Scripts
目录下不会生成可执行文件ykdl.exe
进行下载的时候不会运行着一个Python.exe
进程同时还运行着一个ykdl.exe
进程
但是这还是有其他解决方法的不是?
还有https://github.com/zhangn1985/ykdl/issues/76#issuecomment-285925554
(2)我的.py的打开方式是sublime,不是Python
编辑器关联.py
,我觉得这和有些人把记事本放到右键菜单里一样,为了能快速查看、编辑代码
感谢你的总结。
我并没有搞清楚怎么修改这个问题。 1, 我主要的目的是为了创建一个可以解析视频网站的python库 2,ykdl.py 只是使用这个库的示例。 这两个是我的目标。
所以我不会把ykdl.py放回去,可能的选择是把ykdl.py做成另一个包,类似于: https://github.com/fozzysec/streamlink/tree/master/src
感觉是 Windows 的锅,我把 py 的打开方式写成这个就好了,默认只有 "%1" "path\python.exe" "%1" %*
其实,我觉得也没啥不好,一般没人每次都手动输入吧。
说实话,只要确实能解决存在的问题,不像现在一样装好后要用的话还得先调整些东西。怎么改当然是作者说了算啦
我的意思是: 这种不带 GUI 的命令行工具,一般使用前都会调成自己顺手的方式,这是必须的吧,尤其是这种使用频繁的。 所以反正都要调,就没啥影响啰。
@SeaHOH 新手不友好 另外,你用的 Python 是哪一版?正常情况下,Windows 上装好后应该是这样的
assoc | findstr -i python
.py=Python.File
.pyc=Python.CompiledFile
.pyo=Python.CompiledFile
.pyw=Python.NoConFile
ftype | findstr -i python
Python.CompiledFile="...\Python\python.exe" "%1" %*
Python.File="...\Python\python.exe" "%1" %*
Python.NoConFile="...\Python\pythonw.exe" "%1" %*
很久以前安装过 2.7,之后都用的便携版,中间可能有改动。
@zhangn1985
看了你给出的链接后,我翻了翻 pip 安装后的目录,发现已经带了ykdl_cli
,然而
python -m ykdl_cli
D:\PortableApps\Python\python.exe: No module named ykdl_cli.__main__; 'ykdl_cli' is a package and cannot be directly executed
这样倒是行
python D:\PortableApps\Python\Lib\site-packages\ykdl_cli\ykdl_cli.py
usage: ykdl_cli.py [-h] [-l] [-i] [-j] [-F FORMAT] [-o OUTPUT_DIR]
[-O OUTPUT_NAME] [-p PLAYER] [-s START] [--proxy PROXY]
[-t TIMEOUT]
video_urls [video_urls ...]
ykdl_cli.py: error: the following arguments are required: video_urls
既然如此,那么ren ...\ykdl_cli\ykdl_cli.py ...\ykdl_cli\__main__.py
,果然
python -m ykdl_cli
usage: __main__.py [-h] [-l] [-i] [-j] [-F FORMAT] [-o OUTPUT_DIR]
[-O OUTPUT_NAME] [-p PLAYER] [-s START] [--proxy PROXY]
[-t TIMEOUT]
video_urls [video_urls ...]
__main__.py: error: the following arguments are required: video_urls
不过,我觉得吧,没必要一定把目录搞成这样
ykdl ykdl_cli
或许可以考虑一下这样
ykdl ykdlib
就是不晓得代码需不需要大改
ykdl_cli也是做pip包时犯的错误。没有把历史清空。。 ykdl-->ykdllib改动不小。
ykdl保持不变,新增cykdl和gykdl,一个表示cli,另一个表示gui
那这样呢?
|-ykdl
| |-cydl
| |-gykdl
| |-ykdl
| |-(etc ...)
其实仔细想想添加的方法可以有不同形式
|-ykdl
| |-cydl
| |-gykdl
| |extractors
| |util
| |-(etc ...)
|-cydl
|-gykdl
|-ykdl
|-(etc ...)
不过眼拙,看不出来眼下是哪种
原来可以这样
entry_points={
"console_scripts": ["ykdl=cykdl.__main__:main"]
},
明白了
首先说一下最近摸索出来的一些用法 如我在这儿说的https://github.com/zhangn1985/ykdl/issues/65#issuecomment-282487094 我将
\Scripts\ykdl.py
复制成了\Lib\site-packages\ykdl\__main__.py
然后写一个名为ykdl.py
的文件,内容如下而对于
you-get
,可以这样写也可以这样写
所以说,这个改动https://github.com/zhangn1985/ykdl/commit/fc251875094c162d10426e228a3633159f9c1699 其实并没有做好
补一下
youtube-dl
的