首页 > 解决方案 > mkproject -t django 创建空目录而不是 django 项目

问题描述

我只是在学习如何使用virtualenvwrapper,在浏览了文档之后,我发现该mkproject命令可以创建一个新的virtualenv和一个新的项目。该文档还建议使用-t后跟模板名称的标志将创建一个项目。所以我认为这应该创建一个 django 项目:

mkproject -t django todolist

但是当我转到 my 时PROJECT_HOME,我看到的只是一个名为 的空目录todolist,这应该是一个 django 项目。

我很困惑。这甚至可能吗?因为mkproject命令创建了一个全新的虚拟环境,没有安装 django。那么它如何尝试创建一个 django 项目呢?

请帮助我理解这一点。

标签: pythondjangovirtualenvvirtualenvwrapper

解决方案


至于你的问题

那么它如何尝试创建一个 django 项目呢?

pypivirtualenvwrapper.django页面:

virtualenvwrapper.django 是一个用于 virtualenvwrapper 的模板插件,用于自动创建新的 Django 项目。与 mkproject 一起使用时,它将 Django 安装到新的 virtualenv 中,然后运行 ​​django-admin.py 以创建新的项目框架。

至于你得到一个空目录的原因,如果你看一下virtualenvwrapper的源代码,映射到的-t参数mkproject

# ...
i=$(( $i + 1 ));
templates="$templates ${in_args[$i]}";;
# ... 
for t in $templates
do
    echo
    echo "Applying template $t"
    # For some reason zsh insists on prefixing the template
    # names with a space, so strip them out before passing
    # the value to the hook loader.
    virtualenvwrapper_run_hook --name $(echo $t | sed 's/^ //') "project.template" "$envname" "$PROJECT_HOME/$envname"
done

所以它所做的就是在创建项目后运行一个钩子。因此,如果钩子 ( virtualenvwrapper.django) 不存在,那么期望一个空目录是合理的。


推荐阅读