gpt4 book ai didi

Python:在哪里放置外部包?

转载 作者:太空宇宙 更新时间:2023-11-03 14:42:44 26 4
gpt4 key购买 nike

我有一个使用外部包的 Django 项目,我没有通过 pip 在我的 virtualenv 中安装它,而是通过 git clone 安装的,现在我我想知道把它放在哪里,以及文件夹的名称应该如何。外包是这样的:Evernote Python3 SDK

这是我当前的 Django 项目结构:

➜  (venv:evernote) evernote_bear_project git:(master) tree
.
├── README.md
├── bear2evernote
│ ├── static
│ └── templates
├── config
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── libs
│ ├── evernote-sdk-python3

│ (omitted)

│ └── utils
│ ├── __init__.py
│ └── file_utils.py
└── manage.py

我已将此包 evernote-sdk-python3 放在我的 Django 项目文件夹中名为 libs 的文件夹中。我还将实用函数放在 libs

下名为 utils 的包中

现在我知道有很多关于如何构建项目的建议,例如这两个:

[1] Structuring Your Project — The Hitchhiker's Guide to Python

[2] Python Application Layouts: A Reference – Real Python

而且我还知道 Python 不会强制您使用教条式的文件夹结构。但尽管如此:我对打包、包命名和包结构没有深入的了解。

  1. 将外部包放在我的 (Django) 项目根文件夹下是一种好习惯吗?

  2. 将与我的特定 Django 应用程序无关的所有包/库放在一个名为 libsutils 的文件夹中是否有意义还是 src?


编辑:我也没有看到关于如何使用这些文件夹名称的明确最佳实践:

  • 源代码
  • lib
  • 工具

最佳答案

一般来说,推荐的工作流程如下:

  1. 您的 virtualenv 应该已经从版本控制中排除(例如使用 .gitignore.hgignore)。如果不是,请立即执行。
  2. 如果可能,从 PyPI 将东西安装到您的 virtualenv 中,而不是从 GitHub 或其他地方下载它们。
  3. 如果您必须安装不在 PyPI 上的东西,请使用以下形式之一将 git://... 等 URL 传递给 pip install shown in the reference manual .如果您需要固定到特定提交,请同时传递 -e 进行安装,并在 URL 中包含提交标识符。否则,依赖项将有效地存在于“头部”,并且您将来可能无法返回到那个确切的提交。
  4. 如果出于某种原因您必须维护其他人项目的本地分支(例如,因为您在其上运行 2to3?),那么按照您的建议去做可能是有意义的。克隆(或下载,视情况而定)后使用 pip install -e ./libs/libfoo 安装。不建议这样做,因为您需要定期从上游拉入或向后移植更改,这是非常耗费人力的。这种方法的版本控制也变得很痛苦,因为您可能没有可用于 3 向合并的上游历史记录(有 ways around this - 请注意,Linus 显示的命令可能不是今天执行此操作的最佳方式)。
  5. 一旦你安装了你需要的一切,使用pip freeze 生成一个requirements.txt 文件,将所述文本文件粘贴到你的Django 项目目录中,然后将它 checkin 版本控制。该文件应该足以从上游源完全重新生成所有依赖项,而无需将任何依赖项检查到源代码管理中(当然,除非您正在执行 #4)。
  6. 定期执行 pip install -U 并对较新版本的依赖项运行回归测试,然后重做 pip freeze 并将更改检查到版本控制中。当依赖项破坏向后兼容性或以其他方式导致问题时,您还可以根据需要手动编辑 requirements.txt 文件。

关于Python:在哪里放置外部包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52174700/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com