【问题标题】:Replicate virtualenv without downloading all the packages again on the same machine复制 virtualenv 而无需在同一台机器上再次下载所有包
【发布时间】:2012-11-09 15:45:25
【问题描述】:

我有几个项目需要类似的依赖项,我不想让 pip 每次都从网络上删除依赖项。例如,我使用的是 norel-django 包,如果我在系统范围内安装它,它将与我的标准 django(rdbms 版本)冲突。

有没有办法让我使用 pip “重用”下载的依赖项?我是否需要对源 tar.bz2 文件进行 DL 并制作类似于 pip 存档或其他内容的文件夹结构?任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: python virtualenv pip


    【解决方案1】:

    将以下内容添加到$HOME/.pip/pip.conf

    [global]
    download_cache = ~/.pip/cache
    

    这告诉 pip 将下载缓存在~/.pip/cache 中,这样下次它就不需要出去再次下载它们了。

    【讨论】:

    • 它告诉 pip 在~/.pip/cache 中缓存下载,这样下次就不需要再出去下载了。为简洁的答案道歉;这对我来说似乎有点不言自明(但也许我还没有喝足够的咖啡)。
    • 实际上一个快速的谷歌搜索看起来像我需要的。
    【解决方案2】:

    看起来 virtualenv 有一个virtualenv-clone 命令,或者virtualenvwrapper 有?

    无论如何,它看起来比复制和粘贴虚拟环境目录要复杂一些:

    https://github.com/edwardgeorge/virtualenv-clone

    此外,virtualenv 似乎有一个标志,可以帮助您移动 virtualenv。

    http://www.virtualenv.org/en/latest/#making-environments-relocatable

    $ virtualenv --relocatable ENV 来自 virtualenv 文档:

    这将使一些由 setuptools 创建的文件或分发 使用相对路径,并将更改所有要使用的脚本 activate_this.py 而不是使用 Python 的位置 解释器来选择环境。

    注意:您必须在将任何软件包安装到 环境。如果您使环境可重定位,则安装一个 新包,你必须再次运行 virtualenv --relocatable。

    此外,这不会使您的包跨平台。你可以移动 周围的目录,但它只能用于其他类似的 电脑。一些已知的环境差异可能导致 不兼容性:不同版本的 Python,当一个平台 使用 UCS2 作为其内部 unicode 表示和其他用途 UCS4(编译时选项),明显的平台变化,如 Windows 与 Linux,或 Intel 与 ARM,以及如果您有绑定到 C 的库 系统上的库,如果这些 C 库位于某处 不同的(不同的版本,或不同的文件系统 布局)。

    如果您使用此标志创建环境,当前, --system-site-packages 选项将被隐含。

    【讨论】:

    • 我不需要移动 site-packages 文件夹,只需在我的新 venv 中安装其中安装的内容的副本即可。我知道我可以进行 pip freeze 并导入到我的新 venv 中,但这仍然需要我上网,对于开发盒之类的东西来说,这似乎既麻烦又慢,因为我知道我已经有了这些包机器某处。
    • @PaulJ.Warner,我试图提供一些关于克隆 virtualenv 的方法的建议,这样就不会重新安装软件包
    猜你喜欢
    • 2017-02-13
    • 2015-08-06
    • 2017-08-17
    • 1970-01-01
    • 2016-05-29
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多