houtianze/bypy

missing `bypy/res/auth.json` when using `setup.py install`

Closed this issue · 9 comments

$ bypy list
FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/python3.10/site-packages/bypy/res/auth.json

package source code
https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=bypy-git

$ docker run -v $PWD/bypy:/app -w /app -it python bash
$ PYTHONIOENCODING="utf-8" python setup.py install --root=pkgdir --optimize=1
$ ls pkgdir/usr/local/lib/python3.10/site-packages/bypy/res/auth.json
No such file or directory
choyy commented

刚安装,同错误

$ bypy info
Traceback (most recent call last):
  File "/usr/bin/bypy", line 33, in <module>
    sys.exit(load_entry_point('bypy==1.7.12', 'console_scripts', 'bypy')())
  File "/usr/lib/python3.10/site-packages/bypy/bypy.py", line 3815, in main
    by = ByPy(**bypyopt)
  File "/usr/lib/python3.10/site-packages/bypy/bypy.py", line 325, in __init__
    self.__load_auth_server_list()
  File "/usr/lib/python3.10/site-packages/bypy/bypy.py", line 1001, in __load_auth_server_list
    j = json.loads(pkgutil.get_data(__name__, 'res/auth.json'))
  File "/usr/lib/python3.10/pkgutil.py", line 639, in get_data
    return loader.get_data(resource_name)
  File "<frozen importlib._bootstrap_external>", line 1073, in get_data
FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/python3.10/site-packages/bypy/res/auth.json'

谢谢反馈。
最新版本?奇怪为什么最后/usr/lib/python3.10/site-packages/bypy/res/auth.json这个文件不存在。我刚用python3.9 virtualenv试了一下pip install是没有问题的。

choyy commented

@houtianze 不过我不是pip装的,我好像是从archlinuxcn源安装的,可能是打包问题

@choyy 哦,有可能。
@loynoir 我猜应该是PKGBUILD少加了bypy.res这个包的原因?最近升级里加多了一个res目录打包 -

bypy/setup.py

Line 53 in d7ffb48

packages = ['bypy', 'bypy.res', 'bypy.test'],

(bypy.test包应该不需要加进去,忘了去掉。)

MrAru commented

Clone master branch 之后新建 venv 环境并 pip install . 报错

FileNotFoundError: [Errno 2] No such file or directory: '/home/aru/Temporary/bypy/venv/lib/python3.10/site-packages/bypy/res/auth.json'

但是该文件在当前路径下存在

> fd auth
baidudoc/baidu_oauth_rest_api_list.pdf
baidudoc/baidu_oauth_rest_overview.pdf
bypy/res/auth.json

手动复制 auth.json 至上述位置后解决问题。怀疑是 setup.py 或其他打包脚本内未正确处理或执行复制文件这步?

@MrAru

谢谢提供信息。我自己试了一下,用venv建立虚拟环境source后运行pip install .res/auth.json是存在的。。

ls /tmp/venv39/lib/python3.9/site-packages/bypy/res                                                                                                                           
__init__.py __pycache__ auth.json

@houtianze 3.9 3.10

bypy/setup.py

Line 55 in d7ffb48

'bypy' : ['*.rst', 'bypy/*.pem']

这里没有指定 bypy/res/*.json (未测试),所以 setup.py 的时候不认识。

参考:https://stackoverflow.com/questions/50879668/python-setup-py-some-files-are-missing

本地试了一下./setup.py install后运行bypy ls没有问题啊。