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
varz1xx
V2EX  ›  Python

Python 小白请教一个 pip 打包问题

  •  
  •   varz1xx · 2023-09-27 14:40:07 +08:00 · 1159 次点击
    这是一个创建于 448 天前的主题,其中的信息可能已经有所发展或是发生改变。

    setup.py 文件可以使用 extras_require 指定可选的安装依赖

    想问一下:

    1. 对于使用我的包的人,如果没有安装某个可选依赖,是不是我的包里使用到该可选依赖的代码也会被安装呢
    2. 是否可以做到:如果未安装某个可选依赖,那么我的代码库中使用到这个可选依赖的文件是否也不被安装呢
    3. 主流做法是怎么做的呢?
    5 条回复    2023-10-01 21:09:27 +08:00
    maocat
        1
    maocat  
       2023-09-27 14:53:46 +08:00
    可以看看 requests 库怎么做的,业内标杆
    jstony
        2
    jstony  
       2023-09-27 14:55:56 +08:00
    我记得 setup.py 里写了 install_requires 就行了,安装的时候会自动预先安装 requires 里的。
    Hstar
        3
    Hstar  
       2023-09-27 15:05:10 +08:00
    “是不是我的包里使用到该可选依赖的代码也会被安装呢”
    如果你的包是纯 python 的,install 过程是没有“代码安装”这个步骤的,全部代码文件都复制过去而已。
    如果你想要达到 extras_require 来指定 pip install 之后存不存在某些代码,那么就把这部分代码单独打个包,指定到 extras_require 里去。然后代码里使用 try: from xx.yy import ** expect 的办法识别当前是否已安装某些玩意。
    learningman
        4
    learningman  
       2023-09-28 01:45:36 +08:00 via Android
    python 没有条件编译那种东西,跟楼上说的一样,靠 try 来一个一个试
    fbichijing
        5
    fbichijing  
       2023-10-01 21:09:27 +08:00
    #2 二楼说得对,直接在 install_requires 里面写上你写的库里面要求安装的第三方包和需求版本就可以了。

    其实 Python 库的安装有时候会产生冲突,虽然在很多情况下不会导致很严重的结果。有时候会遇见 A 库要求使用某个第三方库是旧版本,而 B 库使用了该第三方库的新版本,而这个第三方库某些部分是不向后兼容的。这种情况存在但不是很经常见到。

    对于你说的问题,直接在 install_requires 里面写上就行了。你完全可以自己建一个虚拟环境测试一下安装时是否符合自己的预期。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1030 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 20:33 · PVG 04:33 · LAX 12:33 · JFK 15:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.