如何使用conda或virtualenv在虚拟环境之间共享软件包?

5

我有多个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 没有全局安装,因此虚拟环境将单独安装这些软件包。
我尝试使用带有 --system-site-packages 标志的 virtualenv,但这只是使所有全局软件包在虚拟环境中可访问。因此,当我使用 pip freeze 导出我的环境时,它将包含不必要的软件包。
如何创建一个具有所选软件包的虚拟环境,以便如果已全局安装软件包,则不会在本地创建该软件包的新副本?是否可以使用 condavirtualenv 或其他工具实现此目的?
我正在使用 Windows 10 和 python 3.6。
2个回答

0
  • 在pip中,您可以将下载缓存到~/.pip/cache中,以便下次不需要再次下载。只需将以下内容添加到$HOME/.pip/pip.conf中:
[global]
download_cache = ~/.pip/cache
  • 在conda中, 您可以通过在系统上创建一个目录来使用共享软件包缓存,该目录允许共享用户进行读写操作。

然后,为每个需要访问的用户,在其主目录下找到.condarc文件并编辑其中以下输入,指定该共享目录的完整路径:

pkgs_dirs:
    - /path/to/shared_directory

Windows - C:\Users\username.condarc macOS和Linux - /home/username/.condarc
运行conda info来验证软件包缓存。

0

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

我认为您最好设置一个私有的PyPi服务器(example)。这样做,您可以pip-install到您的新项目中 - 具有版本控制和其他好处的附加优势。否则,您实际上只是在撤销虚拟环境首先给您带来的大部分封装优势。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接