我正在我的工作计算机和家用计算机上处理 Python 项目。GitHub 让体验变得非常无缝。
但是我的pyvenv.cfg
文件venv
夹中的文件有问题。因为与我的家用计算机相比,我的工作计算机上的 Python SDK 具有不同的文件路径,所以每次我从另一台计算机中提取项目的更新版本时,我都必须手动进入pyvenv.cfg
以更改文件路径,否则解释器不会home = C:\Users\myName\...
不工作。
有谁知道这个问题的解决方案?
我正在我的工作计算机和家用计算机上处理 Python 项目。GitHub 让体验变得非常无缝。
但是我的pyvenv.cfg
文件venv
夹中的文件有问题。因为与我的家用计算机相比,我的工作计算机上的 Python SDK 具有不同的文件路径,所以每次我从另一台计算机中提取项目的更新版本时,我都必须手动进入pyvenv.cfg
以更改文件路径,否则解释器不会home = C:\Users\myName\...
不工作。
有谁知道这个问题的解决方案?
您不应该将完整的 virtualenv 保留在源代码控制中,因为它通常比您的代码大得多,并且其中可能存在特定于平台和解释器版本的小部件。
相反,您应该保存所需的包——久经考验的方法是一个requirements.txt
文件(但有很多替代品,如 Pyenv、Poetry、Dephell 等)——并在需要运行的每台机器上重新创建 virtualenv上的项目。
要保存预先存在的项目的需求文件,您可以
pip freeze > requirements.txt
当 virtualenv 处于活动状态时。
然后,您可以使用
pip install -r requirements.txt
安装这些软件包。
一般来说,我喜欢使用pip-tools,所以我只管理一个requirements.in
带有包需求名称的文件,然后该pip-compile
实用程序将这些具有确切版本的需求锁定到requirements.txt
.
正如评论中所确认的,您已将虚拟环境文件夹添加到您的项目中,并将其包含在您放在 GitHub 上的文件中。
这通常是一个坏主意,因为它首先破坏了拥有虚拟环境的部分目的。您的虚拟环境将包含特定于其所在机器的平台和配置的包——您可能在一台机器上的 Linux 和另一台机器上的 Windows 上进行开发,您会遇到比配置文件中的一行更大的问题。
你应该做什么:
pip
,您可以运行pip freeze > requirements.txt
以创建一个requirements.txt
文件夹,然后您可以在另一个系统上使用该文件夹pip install -r requirements.txt
来重新创建完全相同的虚拟环境。您所要做的就是保持requirements.txt
最新状态,并在任何一台计算机上的虚拟环境发生变化时更新它,而不是通过 GitHub 拉取它。
更详细地说,一个简单的例子(对于 Windows,对于 Linux 非常相似):
C:\projects\my_project
python -m venv C:\projects\venv\my_project
C:\projects\venv\my_project\Scripts\activate.bat
pip install numpy
C:\projects\my_project
调用requirements.txt
pip freeze > requirements.txt
git clone https://github.com/my_project D:\workwork\projects\my_project
python -m venv D:\workwork\venv\my_project
D:\workwork\venv\my_project\Scripts\activate.bat
pip install -r D:\workwork\projects\my_project\requirements.txt
既然您说您使用的是 PyCharm,那么它仍然容易得多,只需确保 PyCharm 创建的环境位于您的项目文件夹之外。我喜欢将我所有的虚拟环境保存在一个文件夹中,其中 venv 名称与项目名称相匹配。
您仍然可以requirements.txt
在项目中创建一个,当您使用 PyCharm 将项目拉到另一台 PC 时,只需执行相同操作:在项目文件夹外创建一个 venv。PyCharm 将识别出它缺少需求文件中的软件包,并提供为您安装它们。