【问题标题】:Get a list of python packages used by a Django Project获取 Django 项目使用的 python 包列表
【发布时间】:2011-11-17 16:42:23
【问题描述】:

有没有简单的方法来获取 Django 项目使用的 python 包列表?

我看过snakefood 和this question,但在django 环境中似乎都不能很好地发挥作用。

理想情况下,我正在寻找可以从 python shell 或 bash 执行的命令,以列出所有非 django 原生支持的 pypy 依赖项。

【问题讨论】:

  • grep import -r /path/to/your/django/project
  • @TomO'Connor 我曾尝试过 grep 但无法弄清楚如何使其足够精炼,以至于它只是打印出我的导入语句。即使那样,整理所有这些并找出哪些是实际的非本地包仍然会很痛苦
  • grep import ... 还不够。那些使用from x import y 导入的呢?然后还有从 settings.INSTALLED_APPS (及其依赖项)加载的应用程序,这些应用程序可能在 django 项目之外。

标签: python django


【解决方案1】:

这不是一个完整的答案,但希望它会成为一个明智的起点。

据我所知,django 项目的依赖项(除了 django 本身及其依赖项*)包括:

  1. 您的 django 项目导入的模块
  2. 您的项目通过settings.INSTALLED_APPS(及其依赖项)加载的应用程序

#1 项目导入的模块

您可能可以使用snakefood 发现这一点。

#2 通过settings.INSTALLED_APPS 加载的应用程序

运行以下脚本应该会给出INSTALLED_APPS 中列出的应用的路径:

#!/usr/bin/env python
from settings import INSTALLED_APPS
from django.utils.importlib import import_module
import os

app_names = (x for x in INSTALLED_APPS if not x.startswith('django'))
app_paths = (os.path.dirname(os.path.abspath(import_module(x).__file__)) for x in app_names)    
print "\n".join(x for x in app_paths if not x.startswith(os.getcwd()))

然后您可以将其传递给snakefood 以发现它们的依赖关系。


* 要彻底,应该可以从settings 发现各种后端(db/cache/auth/etc.)并将相关模块包含到您的依赖项列表中。

【讨论】:

    【解决方案2】:

    也许这很有用,以防项目使用“pip”来安装依赖项/库:

    pip freeze
    

    【讨论】:

    • 这只会显示安装的内容,而不是使用的。如果您使用的是在多个项目之间共享的环境,则尤其成问题。
    【解决方案3】:

    在你的 django 项目中运行这个命令,这会将所有已安装的包写入 requirements.txt 文件中

     pip freeze > requirements.txt
    

    或者如果你使用的是 python3,那么像这样使用 pip3

    pip3 freeze > requirements.txt
    

    你会在你的 django 项目中找到 requirements.txt 文件

    【讨论】:

    • 您假设正在使用 virtualenv。如果不是这样,这将写入所有系统安装的包,这可能不是用户想要的。
    【解决方案4】:

    pigar 适合我。

    它不包括 INSTALLED_APPS yet,但这只是一些额外的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-28
      • 2020-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      • 2020-09-03
      相关资源
      最近更新 更多