Django 和 'virtualenv' - 正确的项目结构
Posted
技术标签:
【中文标题】Django 和 \'virtualenv\' - 正确的项目结构【英文标题】:Django and 'virtualenv' - proper project structureDjango 和 'virtualenv' - 正确的项目结构 【发布时间】:2016-06-26 11:22:55 【问题描述】:我在建立本地开发项目结构时遇到了两难境地。这是我的设置:
Python 2.7 Django 1.9 Mac OSX El Capitan 10.11 mysql 5.7我犯了一个“错误”,即在全局而不是在虚拟环境中设置我的项目(使用“pip
”将所有内容安装在/>
中)。在阅读this article 之后,我仍然没有得到所有的步骤。 是否正确:
-
我安装了全局 python ( pip, virtualenv in
'/>'
)
然后我转到我的项目将驻留的位置,例如 /users/user/documents/projects/project1
和 从内部 'project1' 我使用 'virtualenv' 为这个项目创建一个虚拟环境(这会创建一个 @ 987654326@文件夹在/project1/
文件夹内)
激活这个虚拟环境和pip install django
然后从新创建的/virtual env/
文件夹中我startproject
在/virtual env/
文件夹中创建另一个/project1/
文件夹
在当前 shell 会话中仍激活虚拟环境的情况下,我继续创建脚本、站点和应用程序文件
广告 2. virtualenv 文件夹应该位于主“project1”文件夹内还是应该包含它?
广告 4. 这是正确的还是我可以在不先激活虚拟环境的情况下这样做?
我的结构目前看起来像这样(从根开始:/users/myUser/documents/projects/
):
/project1/
/website1/
/static/
/templates/
__init.py__
settings.py
urls.py
views.py
wsgi.py
【问题讨论】:
【参考方案1】:常见的解决方案是将虚拟环境和项目保存在单独的文件夹中,例如/users/myUser/.venvs
用于虚拟环境,/users/myUser/documents/projects/
用于项目。在其他方面,你自己做的很对。所以:
-
您需要安装全局 Python 和 virtualenv。
为虚拟环境创建目录,例如运行
mkdir /users/myUser/.venvs
。
为您的项目创建虚拟环境virtualenv /users/myUser/.venvs/project1_venv
。
为您当前的 shell 会话激活环境 /users/myUser/.venvs/project1_venv/bin/activate
。
在 pip install django
这个环境中安装 django 和其他任何东西,或者更好地使用 requirements.txt
文件来跟踪所有项目依赖项。
停用环境,运行deactivate
。
现在,如果您想使用创建的虚拟环境运行项目,请在控制台窗口中运行 /users/myUser/.venvs/project1_venv/bin/activate
,然后运行 python /users/myUser/documents/projects/project1/manage.py runserver
。您可以从任何目录激活 venv,它是为当前 shell 窗口激活的,并且激活后在该窗口中运行的任何 python ...
都将使用此虚拟环境。激活脚本以某种方式修改环境变量,以便使用来自 venv 的解释器和库而不是全局的。 (虽然也有使用全局选项的选项。)
【讨论】:
我愿意接受这个回复,因为它更精细且对新手友好,但上面的回复更快,它让我自己“连接点”。我不知道这方面的礼仪是什么? @AlexStarbuck,您必须自己研究*** Meta 才能找到答案。但总的来说,所有答案都留在这里,标记一个答案(最适合您的问题的答案)背后的想法是,其他有类似问题的人可以更快地找到解决方案。所以总的来说,这不是关于“最快”的答案,而是关于最“有用”的答案。无论如何,很高兴我能提供帮助。 不知何故,从为我的项目激活的 venv 运行服务器时,不是从我拥有的 venv 调用库,而是从项目调用库,这已经是错误的,不应如此。我的项目文件夹中的 lib 丢失了,因为我的项目是一个 repo 的克隆。我不确定,但我认为这不是因为我是从 ubuntu 运行它并且该项目最初是在 Windows 中开发的,但我检查了这个,没有什么需要调整的 ***.com/questions/12033861/… @CarmineTambascia,对不起,我不太明白你的问题。但是,如果它是关于从您下载的 repo 复制 venv,那么您提供的链接有一个很好的答案(另请参见 cmets)。 venvs 是可复制的,你不需要将它存储在 repo 中,或者下载。下载 repo 后,自己创建一个新的 venv(它将是空的,没有项目所需的库)。然后按照在您的操作系统上完成的方式激活 venv,并通过在激活的 venv 中运行pip install -r requirements.txt
来安装所需的软件包。
如果该仓库中没有requirements.txt
(在一个好的python项目中通常不是这种情况),那么您必须找出项目所需的所有库并创建一个要求文件自己,或者只是通过在激活的venv中运行pip install lib_name
来一一安装这些库。此外,某些库可能需要编译,因此不能轻易地将它们从一个系统移动到另一个系统,而是可以在所需系统上安装(并作为安装步骤的一部分进行编译)。【参考方案2】:
将虚拟环境存储在哪里并不重要。找到适合您的项目结构。
我不会将虚拟环境放入项目中,因为您不应该将其签入版本控制(尽管您可以使用忽略)。通常,您只需签入需求文件,以便重新创建环境。
我不会将项目放在虚拟环境中,因为虚拟环境是一次性的。您可能希望在不破坏项目的情况下破坏虚拟环境。此外,您可能希望在不同的虚拟环境下运行相同的项目,例如在升级之前在 Django 1.8 和 1.9 上测试你的代码。
您可能会发现virtualenvwrapper 很有用。它有一些工具可以很容易地在虚拟环境之间创建和切换。它将您的所有虚拟环境存储在一个地方,因此您不必担心将它们放在哪里。
这是正确的还是我可以在不先激活虚拟环境的情况下这样做?
您应该在创建/处理项目之前激活虚拟环境并安装 django。
【讨论】:
谢谢阿拉斯代尔!所以如果我没看错的话:项目文件夹结构和虚拟环境文件夹结构基本上应该是两个完全独立的东西?我可以 1. 在C:
上创建 virtualenv,2. 激活它,3. 将目录更改为 D:
,4. 激活 virtualenv,开始在 D:
上创建我的项目文件夹结构并继续工作?
是的。关键是您在创建/处理项目之前激活虚拟环境。它们不必位于同一位置。以上是关于Django 和 'virtualenv' - 正确的项目结构的主要内容,如果未能解决你的问题,请参考以下文章
使用 Dreamhost 上的 virtualenv 更新新的 Django 和 Python 2.7.*(带乘客)
使用Virtualenv搭建Python3的Django环境
无法在 virtualenv 中导入 django,但在停用时可以工作