【问题标题】:How to share packages between virtual environments using conda or virtualenv?如何使用 conda 或 virtualenv 在虚拟环境之间共享包?
【发布时间】:2018-10-22 10:31:37
【问题描述】:

我有多个 python 项目,每个项目都有自己的虚拟环境。此外,我有一个全局 python 环境。我想在虚拟/全局环境之间共享相同的包文件,而不需要多次复制它们(如果可能)。


Environment        Packages
----------------------------------------
GLOBAL:      A    B    C    D    
VENV_1:      A    B    C         E
VENV_2:                C    D         F

所以,在这个例子中:

  • 所有环境都将为C 共享相同的文件
  • GLOBALVENV_1 还将共享 AB 的文件。
  • 并且GLOBALVENV_2 将为D 共享文件。
  • 但由于EF 未全局安装,因此虚拟环境将单独安装这些包。

我尝试将virtualenv--system-site-packages 标志一起使用,但这只会使所有 全局包在虚拟环境中可访问。因此,当我使用pip freeze 导出我的环境时,它将包含不必要的包。

如何使用选定的包创建虚拟环境,这样如果全局安装了一个包,则不会在本地创建该包的文件的新副本?这可以使用condavirtualenv 或任何其他工具吗?

我正在使用带有 python 3.6 的 Windows 10。

【问题讨论】:

    标签: python virtualenv


    【解决方案1】:

    使用 PyCharm,您可以关联项目,并且您可能可以操作 venv/Source/activate.bat 文件中的 PYTHONPATH 变量,但我认为您找错了树。

    我相信你最好设置一个私有 PyPi 服务器 (example)。这样做,您可以将 pip-install 安装到您的新项目中 - 具有版本控制和其他优点的额外优势。否则,您实际上只是取消了虚拟环境最初为您提供的大部分封装优势。

    【讨论】:

      【解决方案2】:
      • In pip你可以在~/.pip/cache缓存下载,这样下次就不需要再下载了
      [global]
      download_cache = ~/.pip/cache
      
      • In conda,您可以通过在系统上创建共享用户具有读写权限的目录来使用共享包缓存。

      然后,对于将具有访问权限的每个用户,使用以下条目编辑在其主目录中找到的 .condarc 文件,指定该共享目录的完整路径:

      pkgs_dirs:
          - /path/to/shared_directory
      

      Windows - C:\Users\username.condarc

      macOS 和 Linux - /home/username/.condarc

      通过运行conda info 验证包缓存。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-16
        • 1970-01-01
        • 2019-09-02
        • 2023-04-09
        • 1970-01-01
        • 2021-04-24
        • 1970-01-01
        • 2018-04-06
        相关资源
        最近更新 更多