使用 virtualenv 时在 pythonpath 中包含 Git 子模块

2024-01-04

我正在使用 Git 对 Django 项目进行版本控制。

尽可能将所有不属于项目本身但项目所依赖的源代码作为 Git 子模块引入。这些生活在lib目录并且必须包含在 python 路径中。目录/文件布局如下所示:

.git
docs
lib
my_project
    apps
    static
    templates
    __init__.py
    urls.py
    manage.py
    settings.py
    .gitmodules
README

您认为将库包含在 python 路径上的最佳实践是什么?

我正在使用 virtualenv,因此我可以轻松地将库符号链接到 virtualenv 的 site-packages 目录。但是,这会将 virtualenv 绑定到该特定项目。我的理解是 virtualenv 不应该依赖于我的文件。相反,我的文件应该依赖于 virtualenv。

我正在考虑对这个项目的不同本地副本使用相同的 virtualenv,但如果我这样做,我将失去这种能力。有更好的想法如何解决这个问题吗?


Update:

最好的解决方案是让 pip 管理所有依赖项。

但是,这意味着无法使用 git 子模块,如 pip还不能正确处理相对路径 https://github.com/pypa/pip/issues/328。因此,外部依赖项必须存在于 virtualenv 上(通常是:my_env/src/a_python_module)。

我仍然更喜欢使用子模块,以使一些依赖项存在于我的项目树上。这对我来说更有意义,因为我已经需要分叉这些存储库来更改其中的一些部分,并且将来可能需要对它们进行更多更改。


使用以下命令将所有已安装的软件包转储到需求文件中(requirements.txt 看起来是标准命名)

pip freeze > requirements.txt

每次你需要一个新的虚拟环境时,你只需要这样做:

virtualenv <name> --no-site-packages
pip install -r requirements.txt

如果您想更新到较新的软件包, install -rrequirements.txt 也很有效

只需让requirements.txt与你的包保持同步(每次发生变化时运行pip freeze)就可以了,无论你有多少个virtualenv。

注意:如果您需要对软件包进行一些开发,您可以使用 -e (可编辑)参数来安装该软件包,这样您就可以编辑该软件包,并且不必每次想要测试新东西时都卸载/安装:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 virtualenv 时在 pythonpath 中包含 Git 子模块 的相关文章

随机推荐

  • 如何查看用C/C++编写的函数的源代码? [复制]

    这个问题在这里已经有答案了 一般来说 用 R 编写的函数的源代码只需在 R 控制台上输入函数名称即可查找 对于用 C 或 C 编写的函数如何做到这一点 例如当我尝试查找代码时lapply 函数 它向我展示了这个 function X FUN
  • 减少寻找 N 线交点所需的时间

    有N水平或垂直的线段 现在我需要找出交点总数和每条线段的交点总数 N可以达到100000 我尝试检查每一对线 答案是正确的 但我需要减少它所花费的时间 这是我的代码 using namespace std typedef struct Po
  • 在 Android 中检查并启用磁传感器校准

    我在 Android 应用程序中使用磁传感器校准来实现增强现实 当应用程序长时间使用时 传感器校准会逐渐减少 有没有办法检查校准并自动启用或提示用户再次进行手动校准 不幸的是 对于 AR 类型的应用程序 我不知道如何知道磁传感器是否已正确校
  • Find_by_sql 作为 Rails 范围

    Sitepoint 的 r937 非常友善地帮助我找出从数据库返回正确结果所需的查询 我需要的是能够使用这个查询作为范围 并且能够将其他范围链接到这个范围上 查询是 SELECT coasters FROM SELECT order rid
  • JavaScript:“函数体后缺少 } 语法错误”

    好吧 你知道这个错误了 但是我到底为什么会收到这个错误呢 当它在本地运行时 我根本没有收到任何错误 但是当我上传我的项目时 我遇到了这个恼人的语法错误 我已经检查过Firebug https en wikipedia org wiki Fi
  • dplyr 和 tidyr - 使用因子一次性计算大量线性模型

    在阅读了 tidyverse 的更多内容后 我开始立即拟合许多线性模型 如中所述this https blog rstudio org 2016 02 02 tidyr 0 4 0 也就是说 我会按照以下方式做一些事情 library dp
  • 声明具有未知大小目标 c 的对象 X 的数组

    我将如何在 h 文件中声明一个未知大小的数组 我将在类内的 a 函数中计算该数组 例如 我可能有 20 或 30 个 NSArray 只是一个例子 不是我需要的 但是当第一次调用该类时我不会知道确切的数量 在实施文件中 id init if
  • iOS8 模拟器上缺少键盘?

    我正在模拟器中针对 iOS8 检查我的应用程序 令我困惑的一件事是 当我点击 UITextField 或 UITextView 时 键盘不会出现在屏幕上 我仍然可以使用硬件键盘输入文本 此外 如果输入元素具有 inputAccessoryV
  • 在 Makefile 中转义文件名中的冒号

    有没有办法让 GNU make 正确处理包含冒号的文件名 我遇到的具体问题恰好涉及模式规则 这是一个不依赖于剪切和粘贴制表符的简化版本 make version GNU Make 3 81 Copyright C 2006 Free Sof
  • Powershell:从 C# Web 应用程序运行脚本时,Set-ItemProperty 不起作用

    我有一个托管在 IIS 7 5 上的 C Web 应用程序 它运行 powershell 脚本来创建应用程序池和网站 如果我从命令提示符运行 powershell 脚本 它可以工作 但是当我通过 C 应用程序 Set ItemPropert
  • 以编程方式与 OS X 或 Linux 中的串行端口通信

    我有一个 Prolite LED 标牌 我喜欢将其设置为显示来自 apache 日志的滚动搜索查询和其他有趣的统计数据 问题是 我的 G5 没有串口 所以我必须使用 USB 转串口适配器 它显示为 dev cu usbserial 和 de
  • CoreData 问题:-[NSManagedObject setValue:]:无法识别的选择器发送到实例

    我昨天刚开始使用 CoreData 我快要疯了 我创建了一个使用 CoreData 的项目 勾选了框 使用 CoreData 创建了实体 然后为所有实体创建了 NSManagedObject 类 我想他们创建了实体的 setter 和 ge
  • Scala 与 Java 9 不兼容 - java.lang.NoClassDefFoundError

    在我的电脑上安装 Java 9 后运行一个示例 Scala SBT 项目 我就遇到了这个异常 我已经尝试了一些找到的解决方案 但一无所获 Java 9 和 Scala 之间是否存在不兼容的情况 斯卡拉版本 2 12 3 Java版本 jav
  • 如何返回导航堆栈?

    我的应用程序有 7 个后续视图控制器 VC1 VC7在我的导航栏中 我有一个带有操作的后退按钮 点击和长按 当在任何 VC 中长按后退按钮时 应用程序应转到 VC2 并呈现它 就好像用户从 VC1 转到 VC2 一样 具体来说 点击右后退按
  • 构建 ID 的测试结果

    作为计划构建的一部分 我运行并发布了多个具有不同测试运行标题的测试 我的场景是 在发布管道期间 我想获取为正在创建的版本的构建发布的每个测试运行标题的测试摘要 可以使用哪些 Azure DevOps API 或 API 组合来实现此目的 谢
  • 将光标传递到另一个活动是否安全?

    我正在尝试使用光标进行水平滑动 但我只是没有摸索某些东西 希望这里有人可以帮助我理解 我有一个显示项目列表的活动 它使用一个ListView由习俗支持CursorAdapter 并且该适配器由LoaderCallback 这都是标准的东西
  • 在Raspberry Pi上使用Selenium和Python登录zoom时出现错误401

    我正在学习使用 Selenium 我的目标是通过 Raspberry Pi 4 上的 python 程序打开 Zoom 运行粘贴的代码后 该程序按预期工作 打开放大浏览器 最大化窗口 选择并单击 登录 输入凭据 然后按 Enter 键 尝试
  • PARSE_DATETIME 格式化为一年中的某一天

    BigQuery 中与年份 j 格式设置元素一起使用的 PARSE DATETIME 函数存在问题 该函数似乎忽略了一年中的某一天元素 Eg select PARSE DATETIME Y j 2013243 returns 2013 01
  • PayPal API,寻找合适的 API

    我需要在我的网站中添加使用 PayPal 付款的选项 我想要一个 API 我可以在其中向 PayPal 发送信息并立即取回交易 ID 以便我可以将其保存在我的数据库中 哪种 API 最适合我 有没有办法做到这一点 我看到他们有这个清单 li
  • 使用 virtualenv 时在 pythonpath 中包含 Git 子模块

    我正在使用 Git 对 Django 项目进行版本控制 尽可能将所有不属于项目本身但项目所依赖的源代码作为 Git 子模块引入 这些生活在lib目录并且必须包含在 python 路径中 目录 文件布局如下所示 git docs lib my