是否有 python 包允许团队通过类似 git 的界面共享 venvs?

Is there a python package that allows teams to share venvs through a git-like interface?

我正在和一个团队一起工作。我们每个人都有自己的 Windows 系统。我们有共享驱动器和共享 git 存储库。我们想要一个共享的虚拟环境(在 Python)。

我的理解(来自我自己和其他人之前的问题)是虚拟环境不包括 运行 python 所需的所有文件,特别是共享 VE 不包括 Python解释器。

我可以看到我们如何创建一个共享 VE,而且我们似乎可以复制它,或者将它放在共享驱动器上,或者将它放在 git 存储库中。但是我对此的理解是,它并不能消除个人安装自己本地版本python的需要。对吗?

我的一位同事听说(或读到)“有一个包允许团队通过类似 git 的界面共享他们的虚拟环境配置。这样你就可以“拉”更新的配置,它将自动安装新包。这允许每个人在将配置发布给团队之前更改配置并进行测试。"

那么是否有特殊的软件包可以启用此功能?或者它只是与其他文件一起包含在 git 存储库中的常规 venv?如果我们这样做,那么我们必须将所有 venvs 放在我们文件系统的同一个位置,或者我们必须进入并手动更改 activate.bat 中的 VIRTUAL_ENV 变量。对吗?

无论如何,我们都必须安装我们自己的本地版本 python。对吗?

容器化旨在解决“python从何而来?”的问题。问题。我的开发团队通常使用 Dockerfile 将他们的要求安装在 docker-compose 中,为他们的应用程序启动开发环境。与虚拟环境不同,容器提供了一个完整的用户空间解决方案,在 windows 和 osx.

中运行良好

如果虚拟环境在共享驱动器上(组可读),那么您的团队成员应该能够访问它。虚拟环境只是一个目录。

But my understanding of this is that it does not eliminate the need for individuals to install their own local versions of python. Is that correct?

虚拟环境有自己的 python 二进制文件,激活后在虚拟环境中 运行 which python 时可以看到。

So is there a special package to enable this? Or is it just a regular venv that is included in the git repository with the other files? If we do this, then we must all put the venvs in the same place in on our file systems OR we have to go in and manually change the VIRTUAL_ENV variable in activate.bat. Is that correct?

我建议不要将虚拟环境目录上传到版本控制,因为它包含不属于其中的二进制文件和配置文件。也没有必要这样做,因为依赖项在 requirements.txt 文件中进行了跟踪,该文件列出了 pip 依赖项并提交给版本控制。另外,启动虚拟环境后,VIRTUAL_ENV环境变量会自动导出,无需修改

结论

为简单起见,最好让每个用户创建自己的虚拟环境并在其本地计算机上安装来自 requirements.txt 的依赖项。这也确保用户不会更改会影响其他用户的虚拟环境,这是上述共享驱动器方法的缺点

如果他们想要提取最新的需求,那么使用 git pull 提取最新的更改并使用 pip install -r requirements.txt 重新安装依赖项就足够了。您只需确保虚拟环境已激活,否则依赖项将在系统范围内安装。这就是 pipenv 包也派上用场的地方。

通常在我的团队项目中,README 包含为每个团队成员获取此设置的说明。

此外,正如 在评论中提到的,pip 将无法管理 libffiopensslpython-devel 等包等在虚拟环境中。这就是使用 Docker 容器变得有用的地方,因为您可以在构建于主机操作系统之上的隔离环境中安装依赖项。这确保依赖项不会与系统范围的包混淆,这是在任何情况下都应遵循的好习惯。

我过去用过的例子Dockerfile

FROM python:3.8-slim-buster

# Set environment variables:
ENV VIRTUAL_ENV=/opt/venv
ENV PATH="$VIRTUAL_ENV/bin:$PATH"

# Create virtual environment:
RUN python3 -m venv $VIRTUAL_ENV

# Install dependencies:
COPY requirements.txt .
RUN pip install -r requirements.txt

# Run the application:
COPY app.py .
CMD ["python", "app.py"]

我从这篇 Elegantly activating a virtualenv in a Dockerfile 文章中修改。