LifeActor / ykdl

a video downloader focus on China mainland video sites.
https://github.com/zhangn1985/ykdl
Other
1.43k stars 284 forks source link

关于目前目录结构的疑问 #98

Closed mengmo closed 7 years ago

mengmo commented 7 years ago

首先说一下最近摸索出来的一些用法 如我在这儿说的https://github.com/zhangn1985/ykdl/issues/65#issuecomment-282487094 我将\Scripts\ykdl.py复制成了\Lib\site-packages\ykdl\__main__.py 然后写一个名为ykdl.py的文件,内容如下

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from ykdl import __main__;print(__main__.main())

而对于you-get,可以这样写

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from you_get import main;print(main())

#if __name__ == '__main__':
#    main()

也可以这样写

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import you_get;print(you_get.__main__.main())

所以说,这个改动https://github.com/zhangn1985/ykdl/commit/fc251875094c162d10426e228a3633159f9c1699 其实并没有做好

补一下youtube-dl

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from youtube_dl import main;print(main())

#if __name__ == '__main__':
#    main()
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import youtube_dl;print(youtube_dl.main())
mengmo commented 7 years ago

另外再说一下另一个问题,现在pip装好后/extractors目录下还是一个/le目录,一个/letv目录,还有一个douyu.py,一个douyutv.py,难道这个改动https://github.com/zhangn1985/ykdl/commit/f6a92d2b63291d39ad3ffa3e96d3cb01ca63d7e4 对这俩无效。而且还有一个/douyu目录,这我就看不懂了。

zhangn1985 commented 7 years ago

pip包的问题是我在做python wheel的时候犯了一个错误。

mengmo commented 7 years ago

我把上边给出的几段代码要描述的问题具体说一下 在正常安装Python的情况下(.pyPATHEXT内,.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.pyyoutube-dl.py替换了\Scripts目录下的you-get.exeyoutube-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 的

mengmo commented 7 years ago

这个改动 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,我觉得这和有些人把记事本放到右键菜单里一样,为了能快速查看、编辑代码

zhangn1985 commented 7 years ago

感谢你的总结。

zhangn1985 commented 7 years ago

我并没有搞清楚怎么修改这个问题。 1, 我主要的目的是为了创建一个可以解析视频网站的python库 2,ykdl.py 只是使用这个库的示例。 这两个是我的目标。

所以我不会把ykdl.py放回去,可能的选择是把ykdl.py做成另一个包,类似于: https://github.com/fozzysec/streamlink/tree/master/src

SeaHOH commented 7 years ago

感觉是 Windows 的锅,我把 py 的打开方式写成这个就好了,默认只有 "%1" "path\python.exe" "%1" %*

其实,我觉得也没啥不好,一般没人每次都手动输入吧。

mengmo commented 7 years ago

说实话,只要确实能解决存在的问题,不像现在一样装好后要用的话还得先调整些东西。怎么改当然是作者说了算啦

SeaHOH commented 7 years ago

我的意思是: 这种不带 GUI 的命令行工具,一般使用前都会调成自己顺手的方式,这是必须的吧,尤其是这种使用频繁的。 所以反正都要调,就没啥影响啰。

mengmo commented 7 years ago

@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" %*
SeaHOH commented 7 years ago

很久以前安装过 2.7,之后都用的便携版,中间可能有改动。

mengmo commented 7 years ago

@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

就是不晓得代码需不需要大改

zhangn1985 commented 7 years ago

ykdl_cli也是做pip包时犯的错误。没有把历史清空。。 ykdl-->ykdllib改动不小。

zhangn1985 commented 7 years ago

ykdl保持不变,新增cykdl和gykdl,一个表示cli,另一个表示gui

mengmo commented 7 years ago

那这样呢?

|-ykdl
|  |-cydl
|  |-gykdl
|  |-ykdl
|  |-(etc ...)
mengmo commented 7 years ago

其实仔细想想添加的方法可以有不同形式

|-ykdl
|  |-cydl
|  |-gykdl
|  |extractors
|  |util
|  |-(etc ...)
|-cydl
|-gykdl
|-ykdl
|-(etc ...)

不过眼拙,看不出来眼下是哪种

mengmo commented 7 years ago

原来可以这样

      entry_points={
          "console_scripts": ["ykdl=cykdl.__main__:main"]
      },

明白了