我正在工作中开发一些 python 库来访问不同的内部工具。 我遇到两个主要问题,需要一些帮助。
跨脚本/应用程序使用共享模块。如果我想跨不同的脚本/库使用这些模块,那么在特定的虚拟环境/全局模块下使用 pip 安装它们后,我将如何处理更新它?在我的示例中,我有一个 Django 应用程序,它将使用某些模块,然后一些独立的脚本可能会使用它。
版本控制 - 我目前正在尝试跟踪 bitbucket 中的文件。如果这些脚本将使用这些模块的共享实例。如何处理对模块的更改然后将其推送到服务器?每次我想测试或更新时,是否都必须登录服务器并提取新代码并重新安装模块?
尝试从 bitbucket 克隆。这将拉取该文件,但我怎样才能将其作为全局导入。
我看到 2 个选项:
本地打包模块
就像打包在pypi上发布一样,不发布。打包到wheel文件,然后每次你想“升级”时pip安装/升级模块。 它很干净,您可以像其他应用程序一样通过依赖项文件控制哪个应用程序使用哪个版本的模块。简单。
像 pypi 一样创建一个包(参见 https://packaging.python.org/en/latest/tutorials/packaging-projects/)
在 git 中使用子模块。
您可以在 git 存储库中包含子模块来跟踪外部模块(存储库)。基本上是在您的存储库中创建一个映射到另一个存储库的“文件夹”。它很“方便”,但我发现也很容易搞砸,因为您需要专门提取子模块中的更改(更新不仅仅会因为您推送到另一个存储库而显示)。直接更改主存储库中的子模块代码也很诱人,但是您需要确保跟踪/提交这些更改到子模块;它与对主存储库提交更改不同。如果您有多个应用程序使用相同的子模块,并在其中进行更改,那么您通常会遇到不同步的更改和合并冲突。
所以我更喜欢在版本更改时打包并重新安装。 您可以拥有一种文件夹结构,其中您的存储库位于一个级别,其中公共模块作为一个文件夹,并将依赖项指向相对路径。 当您在服务器上安装时,您将克隆具有相同文件夹结构的存储库,并且 pip install deps 指向相对路径。 理想情况下,对于部署,您有一台存储服务器来发布您的私有模块并从那里进行 pip 安装。