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

老生常谈,但还是问一下, Python env 选择

  •  
  •   imn1 · 2020-11-01 18:41:24 +08:00 · 3081 次点击
    这是一个创建于 829 天前的主题,其中的信息可能已经有所发展或是发生改变。
    主要是说 linux(目前是 manjaro kde)
    windows 因为系统不依赖 py,基本配开发环境、迁移也不会搞崩系统
    linux 系统就有不少依赖 py 的东西,以前搞崩过,不敢擅动,还是配环境好了
    还好现在默认 py3 了,以前敲 pip 还是 pip3 都要脑子卡半秒想一下

    搜了一下,env 管理工具好几个,选择困难症犯了
    符合下列需求,哪一个简单、稳定就行
    PS:
    1.基本排除 conda 系,试过迁移失败,几乎相当于重装
    2.也排除 docker 之类,我和大家不同,没有提交代码给别人用的需求,但自己却要装很多工具包辅助工作

    个人需求:
    1.和系统 python 分离,即使版本号相同,这个是必须的
    含 pip 安装包,和使用 sudo 提权运行时,也不会调用系统 python

    2.方便迁移,主要指系统重装,可以在重装这个 env 后,导入或恢复备份就完成配置
    最好能有个 ini/conf 之类,备份恢复就不需要重新设置,所有包能 copy 就能用最好
    后者我是怀疑的,opencv 之类应该要重新编译吧?

    3.小版本升级或切换,也不需要重装全部包,这个是额外需求,不能做到或很复杂可以放弃
    例如,py3.7 安装好一系列包,想升级 py3.8 检查兼容情况,在保留 py3.7 的情况下,不需要全部重新安装包
    如果确认不兼容、需要修改很多的情况,也能顺利切回 py3.7
    一句话就是指定某几个 env 版本可以“共用”大多数的包,不能共用的,或者不在指定清单中的就需要另外装

    呃,以前用 sublime text,现在基本只用 vscode,其他 ide 甚少接触
    12 条回复    2020-11-08 13:22:19 +08:00
    ClericPy
        1
    ClericPy  
       2020-11-01 18:48:09 +08:00   ❤️ 1
    我自己模仿 shiv 做了个把依赖打包成 pyz 的 zip 包的库凑合用着了... 反正就是基于 PEP441 和 zipimport 以及 pip, 把所有相关依赖都放到一个文件夹然后 zip 一下, 调用的时候就是 ./env.pyz script.py

    暂时没发现什么大问题, 就是遇到动态的 .pyd/.so 那些库, 得提前解压缩出来
    renmu123
        2
    renmu123  
       2020-11-01 18:52:07 +08:00 via Android   ❤️ 1
    我目前使用 pyenv+poetry
    1. pyenv 可以管理系统级别 Python 版本,poetry 新建的项目也都是虚拟环境
    2. poetry 在 add 包后会自动添加到 myproject.toml 文件中并生成 lock 文件,只要将这两个文件加入源码管理中,在别的机器中只要执行 poetry install 就可以安装了。如果 win 种设涉及到编译的包需要安装 vs studio 之类的工具,我一般就手动直接找个编译好的安装
    3. 兼容性检查好像有,因为每个包都有支持的 Python 版本,我倒没有这个需求,一般就一个版本用到死,如果升级出现了问题是比较难 debug 的

    ps:poetry 在 win 中不能用,但是在 win 中本身管理多个 Python 环境也是比较容易的
    ClericPy
        3
    ClericPy  
       2020-11-01 18:53:37 +08:00
    @ClericPy 点错了直接发出来了... 没写完, 重新发一次

    接上文...

    不过也做了自动解压缩并且比对打包时间戳来决定是否要重新解压, 没什么要操心的

    做这小工具其实对我来说主要是 Hadoop Streaming 需要各种离线工具上传, 所以抽了个周末写的, 当 app 用还好, 当虚拟环境用因为是基于 subprocess call 来启动自身解释器去解释别的 py 文件, 不知道运行久了会不会有什么问题

    同 Manjaro xfce 路过

    v2ex 不支持代码格式化就算了, 还老说我 [请不要在每一个回复中都包括外链,这看起来像是在 spamming] 问题是我哪发链接了
    imn1
        4
    imn1  
    OP
       2020-11-01 19:04:59 +08:00
    @ClericPy #3
    文本中带 . 或 / 与 . 的,都容易误判为链接,@Livid 反馈吧,也不是短时间能解决的事
    superrichman
        5
    superrichman  
       2020-11-01 19:21:17 +08:00 via iPhone
    用 python3 -m pip install xxx —user 安装的模块会在用户目录下,和系统的不在一起

    要重装或迁移可以把整个目录复制粘贴(不过最好还是维护好 requirements.txt )

    我升级就是直接把 3.7 的目录复制到 3.8,个别模块有问题再单独重装
    zachlhb
        6
    zachlhb  
       2020-11-02 08:19:34 +08:00 via Android
    conda 可以导出包列表,重建环境导入不就行了
    no1xsyzy
        7
    no1xsyzy  
       2020-11-02 11:13:33 +08:00
    #2 基础上再用 dephell 转换一下依赖项?具体没用过,不过说是可以 setup[.]py poetry 各类 requirements 互转
    目前 virtualenvwrapper + pip-tools 用得爽,解释器一直尽量跟最新版本,用上了 := 已经退不回 <3.8 了
    yucongo
        8
    yucongo  
       2020-11-02 12:34:35 +08:00
    @renmu123 win 里用 poetry 没问题啊…… 还可以用不同的 Python 版本,修改 C:\Users\xyz\.poetry\bin\poetry.bat 里的 python(例如改成 py -3.8 ) 拷成 poetry38.bat

    @echo off
    py -3.8 "%USERPROFILE%\.poetry\bin\poetry" %*

    就可以生成 Py3.8 的虚拟环境。我的 Windows 里各种用 poetry 整的 3.6 、3.7 、3.8 的虚拟环境。
    renmu123
        9
    renmu123  
       2020-11-02 12:49:50 +08:00
    @yucongo #8 说错了应该是 pyenv 在 win 不能用
    numoone
        10
    numoone  
       2020-11-04 17:45:06 +08:00
    conda 的虚拟环境管理就很好用啊。在 linux 的话,直接 copy 虚拟环境目录到另外一台设备上就能直接使用。
    endpain
        11
    endpain  
       2020-11-04 19:47:00 +08:00
    建议还是用 conda 吧~深入了解使用一下还是很不错的。
    HAluelue
        12
    HAluelue  
       2020-11-08 13:22:19 +08:00
    我一般是用 requirements.txt- -
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   3207 人在线   最高记录 5556   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 14:38 · PVG 22:38 · LAX 06:38 · JFK 09:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.