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

Python 的包管理感觉怎么这么不优雅。。。

  •  
  •   serge001 · 2018-01-03 23:00:14 +08:00 · 19454 次点击
    这是一个创建于 2296 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人前端一枚,习惯了 node 的 npm 之后感觉配置和使用起来都很简单方便,最近学习了一点 python 后,感觉 python 的包管理怎么这么不优雅。首先,配置文件居然是用 txt 文件来写的,二进制文件我用编辑器是无法打开的,然后用 git 也不能很好的版本管理;其次,pip install 是把包全都装在了全局,打开用户目录,一大堆以点开头的文件夹,抓狂。。。

    第 1 条附言  ·  2018-01-04 10:13:48 +08:00
    更新:昨晚是我傻逼了,txt 文件是文本文件来的。因为之前 fork 了一个 python 项目,里面的包依赖管理文件是 requirements.txt ,我用编辑器 atom 打开不知道为什么提示说不能打开二进制文件,所以误以为 txt 文件是二进制文件,今天又试了一下发现可以了。。。所以 git 版本控制是没问题的,不过还是很不理解为啥用 txt 来写。非常感谢各位大大提出的各种解决方案,感谢感谢~
    120 条回复    2018-01-23 17:06:55 +08:00
    1  2  
    rcteya76084
        101
    rcteya76084  
       2018-01-04 19:37:34 +08:00   ❤️ 1
    你们不要吵了,PHP 是最好的语言
    ipwx
        102
    ipwx  
       2018-01-04 20:25:29 +08:00
    @vwxyzjn 其实我也主要用 Python,不过可能我写的程序不是很业务,而且引入依赖也比较谨慎(小库基本上 copy-paste-modify-test,好处是自己的单元测试比较放心),所以没啥大问题。
    kiwi95
        103
    kiwi95  
       2018-01-04 23:14:18 +08:00
    互联网上一半的流量都在跑 npm install/update,能不优雅
    forrestchang
        104
    forrestchang  
       2018-01-04 23:20:34 +08:00
    Python 的导入机制确实不太优雅,但是包管理机制还是众多语言中比较好的。

    1. requirements.txt 只是文本文件,在 Linux 上后缀和文件是不是二进制无关,这样写只是约定俗成,你也可以写成别的;
    2. 正确的做法是一个项目用一个 virtualenv 来管理包,进行项目间的包隔离。
    Owenjia
        105
    Owenjia  
       2018-01-04 23:24:29 +08:00
    requirements.txt 还是只在开发中使用比较好,有分发需求的话依赖最好写 setup.py 里;
    pip 确实存在一些问题,比如处理依赖关系上,安装可能会需要手动使用系统包管理安装一些东西,卸载不能自动清理已经不被依赖的包(也许可以但我不知道)。
    est
        106
    est  
       2018-01-04 23:28:42 +08:00
    npm 的项目,放半年之后 npm update 一次保证跑不起来。
    Sparetire
        107
    Sparetire  
       2018-01-05 03:14:18 +08:00 via Android
    @est 那别说项目了,某些 linux 不都是这样。。
    lightening
        108
    lightening  
       2018-01-05 03:38:10 +08:00
    Python 的包管理机制确实不是最好的。不过你的吐槽都不在点上。
    allenhu
        109
    allenhu  
       2018-01-05 08:35:32 +08:00 via Android
    Python 包好像是大小写乱用,看的很蛋疼
    quinoa42
        110
    quinoa42  
       2018-01-05 09:00:12 +08:00
    我常用 pyenv,尝试了一下 pipenv,确实很炫酷,但是感觉很不顺手…
    用 pipenv 的话 virtualenv 肯定要全交给 pipenv 管理,可是 pipenv 各种操作都是直接无视 pyenv,比如 pipenv install --system ***把 package 装到了我也不知道在哪的地方
    而且自带 flake 等等让我觉得 pipenv 有点做的太多了
    如果能有一款只包含 pipfile[.lock]管理的工具就好了,其他方面我觉得还是 pyenv 好用
    综上,滚回 pyenv 了:)
    如果有正确的 pyenv+pipenv 使用方式,请务必告诉我
    yylucifer
        111
    yylucifer  
       2018-01-05 09:42:32 +08:00
    你用的姿势不对。。
    korvin
        112
    korvin  
       2018-01-05 09:59:41 +08:00
    你要和 node 的 npm 像一点可以用 pipenv 可以区分 prod 和 dev 包
    ryh
        113
    ryh  
       2018-01-05 10:34:41 +08:00
    npm 昨天各种在莫名其妙的 hang, taobao 的 官方的 官方的+梯子 都这样😂
    感觉是墙的锅
    ryh
        114
    ryh  
       2018-01-05 10:36:04 +08:00
    补充下:yarn 也是如此
    qgb
        115
    qgb  
       2018-01-05 13:11:01 +08:00 via Android
    @kiwi95 233 这是黑吗
    billion
        116
    billion  
       2018-01-05 13:25:36 +08:00
    Pipenv: Python Dev Workflow for Humans

    http://pipenv.readthedocs.io/en/latest/
    lolizeppelin
        117
    lolizeppelin  
       2018-01-05 16:58:15 +08:00 via Android
    瞎 bb openstack 那么大项目依赖都能写得清清楚楚

    自己搞不定依赖怪 pip

    再说了 linux 服务器上就该老老实实打包 rpm
    什么包管理都是 TM 是假的

    要么好好写依赖做 rpm 包 要么就和 Java 一样全部依赖包一个整的 部署的时候还 pip npm 早点死一边去
    param
        118
    param  
       2018-01-06 18:39:13 +08:00
    @lolizeppelin 部署我不觉得要打成 rpm,rpm 只保证兼容 red hat 系。我觉得在 Dockerfile 里写 pip 打包是 docker 镜像才是最佳实践。
    est
        119
    est  
       2018-01-07 16:48:02 +08:00
    cjc91
        120
    cjc91  
       2018-01-23 17:06:55 +08:00
    有一对情侣,男的非常懦弱,做什么事情之前都让女友先试。女友对此十分不满。 一次,两人出海,返航时,飓风将小艇摧毁,幸亏女友抓住了一块木板才保住了两人的性命。女友问男友:你怕吗?男友从怀中掏出一把水果刀,说:怕,但有鲨鱼来,我就用这个对付它。女友只是摇头苦笑。 不久,一艘货轮发现了他们,正当他们欣喜若狂时,一群鲨鱼出现了,女友大叫:我们一起用力游,会没事的!男友却突然用力将女友推进海里,扒着木板朝货轮了,并喊道:这次我先试!女友惊呆了,望着男友的背影,感到非常绝望。鲨鱼正在靠近,可对女友不感兴趣而径直向男友游去,男友被鲨鱼凶猛地撕咬着,他发疯似地冲女友喊道:我爱你! 女友获救了,甲板上的人都在默哀,船长坐到女友身边说:小姐,他是我见过最勇敢的人。我们为他祈祷!不,他是个胆小鬼。女友冷冷地说。 您怎么这样说呢?刚才我一直用望远镜观察你们,我清楚地看到他把你推开后用刀子割破了自己的手腕。鲨鱼对血腥味很敏感,如果他不这样做来争取时间,恐怕你永远不会出现在这艘船上。什么?女友听到真相如同晴天霹雳,她悲痛欲绝,伤心无比,只想立刻跳进海里和男友死在一起。关键时刻船长拉住了她:如果我是你,一定会好好的活下去,并用挖掘机把这条大海填平,为你的男朋友报仇血恨。女友沉默数秒,冷静的问:挖掘机技术哪家强。船长:中国山东找蓝翔。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5781 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 02:58 · PVG 10:58 · LAX 19:58 · JFK 22:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.