微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 Python 项目传输到不同的计算机

如何解决将 Python 项目传输到不同的计算机

我正在我的工作计算机和家用计算机上开发一个 Python 项目。 GitHub 使体验变得非常无缝。

但是我的 pyvenv.cfg 文件夹中的 venv 文件有问题。因为与家用计算机相比,我的 Python SDK 在我的工作计算机上具有不同的文件路径,所以每次我从我的另一台电脑,否则解释器不工作。

有人知道这个问题的解决方案吗?

解决方法

您不应该将完整的 virtualenv 保留在源代码管理中,因为它通常比您的代码大得多,并且其中可能存在特定于平台和解释器版本的位和 bob。

相反,您应该保存所需的包——久经考验的方法是一个 requirements.txt 文件(但有很多替代方案,如 Pyenv、Poetry、Dephell 等)——并重新创建运行项目所需的每台机器上的 virtualenv。

要为预先存在的项目保存需求文件,您可以

pip freeze > requirements.txt

当 virtualenv 处于活动状态时。

然后,你可以使用

pip install -r requirements.txt

完全安装这些软件包。

一般来说,我喜欢使用 pip-tools,所以我只管理一个带有包需求名称的 requirements.in 文件,然后 pip-compile 实用程序将那些具有确切版本的需求锁定到 {{ 1}}。

,

正如评论中所确认的,您已将虚拟环境文件夹添加到您的项目中,并将其包含在您放在 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 存储库中,包括该文件
  • 在另一台开发机器上,克隆或拉取项目,例如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 会识别出它缺少需求文件中的包并提供为您安装它们。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?