【问题标题】:Global development dependencies in python, aside from virtual environments除了虚拟环境之外,python 中的全局开发依赖项
【发布时间】:2021-04-20 03:34:58
【问题描述】:

问题:必须在每个 python 虚拟环境(包括由 pipenv、诗歌等创建的虚拟环境)中安装公共开发依赖项是非常烦人的。 比如flake8pylintjediblack

最好将它们设置为在每个虚拟环境中全局可用,而不必每次都手动安装。

last time someone asked how to do this,他们得到了一堆 cmets 责骂他们与他们的工具作斗争,除了 VSCode 特定的事情之外没有任何实际的答案。

但是,我最近在 Elpy 包(Emacs 的 Python 包)的文档中 came across a comment 表明这样的事情在全球范围内确实是可能的:

可以创建一个单独的虚拟环境,仅用于在其中安装 flake8,然后只需将命令脚本链接到 PATH 内的目录,这意味着您无需在每个虚拟环境中单独安装程序.

这听起来是一个了不起的想法……而且可以应用于许多其他开发工具类型的依赖项。不幸的是,编写 Elpy 文档的人没有详细说明这种事情是如何发生的。

有人可以帮助将引用的段落翻译成实现这一目标的实际步骤吗?比如,“命令脚本?”那是什么?这个想法是否只是 virtualenv 存在于某个目录中,并且将该目录添加到一个人的 shell $PATH 会使其中的库以某种方式对所有其他 virtualenv 可用?谢谢!

【问题讨论】:

    标签: python path dependencies virtualenv flake8


    【解决方案1】:

    当然——这正是我设置机器的方式,包括从无到有的引导步骤:

    # in .bashrc
    export PATH=$HOME/bin:$PATH
    
    # some script you run once
    mkdir -p ~/opt
    curl -o virtualenv.pyz https://bootstrap.pypa.io/virtualenv.pyz
    python3 virtualenv.pyz ~/opt/venv
    rm virtualenv.pyz
    
    ~/opt/venv/bin/pip install flake8 pre-commit tox twine
    mkdir -p ~/bin
    ln -s ~/opt/venv/bin/flake8 ~/bin/
    ln -s ~/opt/venv/bin/pre-commit ~/bin/
    ln -s ~/opt/venv/bin/tox ~/bin/
    ln -s ~/opt/venv/bin/twine ~/bin/
    # etc.
    

    我首先下载virtualenv.pyz,它是一个zipapp,所以我不需要调用任何全局pip/可能包装不良的virtualenv

    然后我在~/opt/venv中设置了一个virtualenv

    我在那里安装我的工具

    然后我将它们符号链接到~/bin,我通过.bashrc 将其放在我的PATH

    我的实际代码位于我的配置管理存储库中:https://github.com/asottile/personal-puppet/blob/753d9491c27b17ae6a2a145fc2aad25d8896e76f/modules/desktop/manifests/venv.pp

    【讨论】:

    • 谢谢。所以即使在 virtualenv 中,Python 实际上也可以从一个普通的 shell PATH 中找到可见的库?我没有意识到......这非常有帮助。
    • 是的,你在 virtualenv 中安装的可执行文件的 shebang 指向特定的 python
    猜你喜欢
    • 2022-01-23
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 2021-01-10
    • 1970-01-01
    相关资源
    最近更新 更多