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

elb*_*laf 3 python git package virtualenv

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

\n

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

\n

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

\n

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

\n

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

\n

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

\n

Dan*_*ell 5

容器化旨在解决“Python从哪里来?”的问题。问题。我的开发团队通常使用 Dockerfile 将他们的需求安装在 docker-compose 中,为他们的应用程序启动开发环境。与虚拟环境不同,容器提供了完整的用户空间解决方案,在 Windows 和 OSX 中运行良好。


Roa*_*ner 5

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

但我对此的理解是,它并不能消除个人安装自己本地版本的python的需要。那是对的吗?

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

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

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

结论

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

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

通常在我的团队项目中,自述文件包含为每个团队成员进行此设置的说明。

此外,正如Daniel Farrell在评论中提到的那样,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"]
Run Code Online (Sandbox Code Playgroud)

我从Dockerfile文章中的 Elegantly activate a virtualenv 进行了修改。