两行代码自动检测、安装和引用多个 Python 模块 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Baboonowen
V2EX    Python

两行代码自动检测、安装和引用多个 Python 模块

  •  
  •   Baboonowen
    reycn 317 天前 7485 次点击
    这是一个创建于 317 天前的主题,其中的信息可能已经有所发展或是发生改变。

    搞了一个 Python 工具,在运行时自动检测、安装和引用需要的模块。类似 R 语言的 pacman 包。

    特性

    • 自动检测 pip 库是否未安装
    • 比手动检测和安装更快速
    • 简单易用,婴儿也能轻松上手

    信息

    • 项目链接: https://github.com/reycn/pkgman
    • 直接安装:pip install pkgman
    • 使用方式:
      from pkgman import include include(["pandas", "numpy"]) 

    一些朋友可能会觉得没用,但作为日常分析数据的人,如果突然要快速做一个数据分析,就可以在代码整洁的前提下,自动安装包。如果你有多台机器,这个也能降低你的环境同步负荷。

    效果预览

    img

    还不是很完善(一些限定和提示没弄),但我自己已经一直在用了。 欢迎 & 意见 & PR

    16 条回复    2024-11-29 14:37:58 +08:00
    Baboonowen
        2
    Baboonowen  
    OP
       317 天前
    @yukino 不是一个东西,我自己这个更多用在一遍一遍的数据分析场景而不是“运行脚本”。uv 也在用。
    Lychee0
    &bsp;   3
    Lychee0  
       317 天前
    支持从 其他 wheel 源 /git 仓库 安装吗
    比如 `pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121`
    Baboonowen
        4
    Baboonowen  
    OP
       317 天前   1
    @Lychee0 可以考虑添加!这个属于还比较常用的
    JeremyFeng
        5
    JeremyFeng  
       317 天前   1
    赞一个,是很实用的工具。

    https://github.com/deshaw/pyflyby

    这个包也可以实现类似的功能。
    frostming
        6
    frostming  
       317 天前
    @Baboonowen 就是一样的,这还是标准化的,PDM 也支持

    修正一下上面老哥的 URL: https://docs.astral.sh/uv/guides/scripts/#declaring-script-dependencies
    PDM 的: https://pdm-project.org/en/latest/usage/scripts/#single-file-scripts
    lao66
        7
    lao66  
       317 天前 via iPhone
    感觉挺好
    bg7lgb
        8
    bg7lgb  
       317 天前
    这和用 requirements.txt 有啥区别?
    Baboonowen
        9
    Baboonowen  
    OP
       317 天前
    @bg7lgb 写项目肯定这些配置文件最好。但如果你实在做数据分析,一会儿要加这个新方法,一会儿要加那个图包,没有东西比这种方式更快。这也是我的 motivation
    fbichijing
        10
    fbichijing  
       317 天前
    我自己感觉完全没有这种需求。

    在安装一个 package 的时候,一般目标 package 的 setup.py 都已写了依赖和目标 package 的版本。另外,手动安装还能规避或者控制一些版本冲突问题。有些库比较激进,有些则比较保守。有些新版本的库大幅改变了函数和一些行为模式,有些库的展示效果也有差异。可能在某些特定时候并不是需要的。印象中以前使用到一个图片库,不适配某个依赖库的最新版本。只能使用 requirements.txt 才能比较方便测试,运行和迁移。

    不过也正如你所说,“类似 R 语言的 pacman 包。”,可能是我没有用过你说的这个包,相对难以 get 到你所写的这个 package 所解决的问题点在哪里。

    加油。不同的人喜欢不同的歌曲,这首歌曲也有它的听众。
    tomczhen
        11
    tomczhen  
       317 天前   1
    如果环境版本比较简单的话确实不错,我能想到的就是只有单一 anacodamini 的情况体验应该挺好。

    不过工程化角度来说就不太合适了,叠加 Python 的依赖管理缺陷,容易出现“在我机器是正常的”这种问题
    julyclyde
        12
    julyclyde  
       317 天前   1
    你这是把声明式退化为执行式了
    3085570450tt
        13
    3085570450tt  
       317 天前
    突然想到了名为 [pyforest PyPI]( https://pypi.org/project/pyforest/) 的 python 包,这个包就是帮你自动导入的,不会进行安包。
    pyforest 中用了一些 lazy_imports 的概念,或许可以做一些参考。
    ruanimal
        14
    ruanimal  
       316 天前
    lz 是完全不用 ide 吧,用这种动态导入,ide 里面估计全是 error 提示,代码补全也不准了
    deplives
        15
    deplives  
       316 天前
    那你代码补全还用不用了,你自己截图的 jupyter 里面都是到处飘红。而且你这个也是显式的 import ,无非从 import 换成了 include , 多此一举
    julyclyde
        16
    julyclyde  
       316 天前
    @deplives 他这个虽然 import 但是可以一带多,这算是好处
    但坏处就是从声明式编程了执行式
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1014 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 18:29 PVG 02:29 LAX 11:29 JFK 14:29
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86