Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:与[在svn中手动携带包]相比,哪种方法更好?_Python_Django_Directory Structure - Fatal编程技术网

Python Django:与[在svn中手动携带包]相比,哪种方法更好?

Python Django:与[在svn中手动携带包]相比,哪种方法更好?,python,django,directory-structure,Python,Django,Directory Structure,我有一个django项目,它使用了很多第三方应用程序,所以我想从两种方法中选择一种来管理我的情况: 我可以使用[virtualenv+pip]和pip freeze作为需求文件来管理我的项目依赖关系 我不必担心应用程序,但我的代码无法将其提交给svn。 我可以在我的svn结构中有一个lib文件夹,让我的应用程序放在那里,并将其添加到sys.path 这样,我的依赖项可以提交给svn,但我必须管理sys.path 我应该走哪条路 每种方法的优缺点是什么 更新: 方法1缺点:难以与appengin

我有一个django项目,它使用了很多第三方应用程序,所以我想从两种方法中选择一种来管理我的情况:

我可以使用[virtualenv+pip]和pip freeze作为需求文件来管理我的项目依赖关系

我不必担心应用程序,但我的代码无法将其提交给svn。 我可以在我的svn结构中有一个lib文件夹,让我的应用程序放在那里,并将其添加到sys.path 这样,我的依赖项可以提交给svn,但我必须管理sys.path

我应该走哪条路

每种方法的优缺点是什么

更新:

方法1缺点:难以与appengine合作


至少到目前为止,这是一个尚未回答的问题。最近对此有一些讨论:-

伊恩·比金在评论中说:-

我确实认为我们可以做一些将两种系统结合起来的事情。我 举个例子,我想我之前已经发布了处理这个问题的方法 应该清理并重新发布。您可以在非常短的时间内处理库 Python中的类似方式,同时仍然使用我们必须管理的工具 那些图书馆。你可以这么做,但怎么做一点也不明显 这样做,人们往往会依赖于重新安装软件包之类的东西 在部署时


第一种方法似乎在python开发人员中最常见。当我第一次开始使用Django进行开发时,感觉有点奇怪,因为在使用PHP时,将第三方库检查到项目repo中是很常见的,但正如Ian Bicking在链接文章中所说的,PHP风格的部署忽略了诸如不可移植库之类的东西。您不想将mysqldb或PIL之类的东西打包到您的项目中,这些东西最好由Pip或distribute之类的工具来处理。

至少到目前为止,这是一个尚未回答的问题。最近对此有一些讨论:-

伊恩·比金在评论中说:-

我确实认为我们可以做一些将两种系统结合起来的事情。我 举个例子,我想我之前已经发布了处理这个问题的方法 应该清理并重新发布。您可以在非常短的时间内处理库 Python中的类似方式,同时仍然使用我们必须管理的工具 那些图书馆。你可以这么做,但怎么做一点也不明显 这样做,人们往往会依赖于重新安装软件包之类的东西 在部署时


第一种方法似乎在python开发人员中最常见。当我第一次开始使用Django进行开发时,感觉有点奇怪,因为在使用PHP时,将第三方库检查到项目repo中是很常见的,但正如Ian Bicking在链接文章中所说的,PHP风格的部署忽略了诸如不可移植库之类的东西。您不想将诸如mysqldb或PIL之类的东西打包到您的项目中,这些东西最好由Pip或distribute之类的工具来处理。

所以这就是我目前正在使用的

所有项目都将在项目根目录下具有virtualenv目录。我们将其命名为.env,并在vcs中忽略它。dev在开始开发时做的第一件事是初始化这个virtualenv并安装requirements.txt文件中指定的所有需求。我更喜欢在projectdir中使用virtualenv,这样开发人员就可以看到它,而不是在其他地方使用它,比如$HOME/.virtualenv,然后使用source$HOME/virtualenv/project\u name/bin/activate来激活环境。相反,开发人员通过直接从项目根目录调用env可执行文件与virtualenv交互,例如:-

.env/bin/python
.env/bin/python manage.py runserver
要部署,我们有一个结构脚本,它将首先将项目目录和.env目录导出到tarball中,然后将tarball复制到live server,卸载it部署目录,并执行一些其他任务,如重新启动服务器等。当我们在live server上卸载tarball时,fabric脚本确保再次运行virtualenv,以便修复.env/bin中的所有shebang路径。这意味着我们不必在live server上重新安装依赖项。用于部署的结构工作流如下所示:-

fab create_release:1.1 # create release-1.1.tar.gz
fab deploy:1.1 # copy release-1.1.tar.gz to live server and do the deployment tasks
fab deploy:1.1,reset_env=1 # same as above but recreate virtualenv and re-install all dependencies
fab deploy:1.1,update_pkg=1 # only reinstall deps but do not destroy previous virtualenv like above
我们也不使用setup.py将project src安装到virtualenv中,而是将path添加到sys.path中。因此,在mod_wsgi下部署时,我们必须在mod_wsgi的vhost配置中指定2条路径,类似于:-

WSGIDaemonProcess project1 user=joe group=joe processes=1 threads=25 python-path=/path/to/project1/.env/lib/python2.6/site-packages:/path/to/project1/src
简言之:

我们仍然使用pip+virtualenv来管理依赖关系。 部署时,我们不必重新安装需求。 我们必须稍微保持进入sys.path的路径。
这就是我目前正在使用的

所有项目都将在项目根目录下具有virtualenv目录。我们将其命名为.env,并在vcs中忽略它。dev在开始开发时做的第一件事是初始化这个virtualenv并安装requirements.txt文件中指定的所有需求。我更喜欢在projectdir中使用virtualenv,这样开发者就可以清楚地看到它,而不是在其他地方使用它,比如$HOME/.virtuale 然后执行source$HOME/virtualenv/project\u name/bin/activate来激活环境。相反,开发人员通过直接从项目根目录调用env可执行文件与virtualenv交互,例如:-

.env/bin/python
.env/bin/python manage.py runserver
要部署,我们有一个结构脚本,它将首先将项目目录和.env目录导出到tarball中,然后将tarball复制到live server,卸载it部署目录,并执行一些其他任务,如重新启动服务器等。当我们在live server上卸载tarball时,fabric脚本确保再次运行virtualenv,以便修复.env/bin中的所有shebang路径。这意味着我们不必在live server上重新安装依赖项。用于部署的结构工作流如下所示:-

fab create_release:1.1 # create release-1.1.tar.gz
fab deploy:1.1 # copy release-1.1.tar.gz to live server and do the deployment tasks
fab deploy:1.1,reset_env=1 # same as above but recreate virtualenv and re-install all dependencies
fab deploy:1.1,update_pkg=1 # only reinstall deps but do not destroy previous virtualenv like above
我们也不使用setup.py将project src安装到virtualenv中,而是将path添加到sys.path中。因此,在mod_wsgi下部署时,我们必须在mod_wsgi的vhost配置中指定2条路径,类似于:-

WSGIDaemonProcess project1 user=joe group=joe processes=1 threads=25 python-path=/path/to/project1/.env/lib/python2.6/site-packages:/path/to/project1/src
简言之:

我们仍然使用pip+virtualenv来管理依赖关系。 部署时,我们不必重新安装需求。 我们必须稍微保持进入sys.path的路径。
Virtualenv和pip非常适合在一台机器上处理多个django项目。但是,如果您只有一个正在编辑的项目,则不必使用virtualenv。

virtualenv和pip非常适合在一台机器上处理多个django项目。但是,如果您只有一个正在编辑的项目,则无需使用virtualenv。

感谢您提供的链接,但我认为这不是关于svn上的库,而是关于携带已安装的依赖项。我将查看该链接,并在需要时返回:谢谢你的链接,但我认为这不是关于svn上的lib,而是关于携带已安装的依赖项。我将查看该链接,并在需要时返回:对于问题本身,你有一些立足点,你可以考虑把它们添加到问题本身中,我们可以等待一个解决方案。你对问题本身有一些立足点,你可以考虑把它们添加到问题本身,我们可以等待一个解决方案。为什么不在这种情况下使用构建?我不想引入另一个复杂性,与构建配方进行战斗并不好玩。一旦我感觉舒服,我可能会把它介绍给我们的团队,但现在不行,它太脆弱了。除了在我们的项目根目录中有bin dir之外,我不知道它比pip.Hm有什么优势。。Buildout=fabric+virtualenv+pip我不提倡Buildout,它是一种选择。被认为是一种更成熟、更明确的管理依赖关系、环境的方法。不容易出现人为错误!我自己使用pip+virtualenv,想尝试一下Buildout。为什么不在这种情况下使用Buildout呢?我不想引入另一种复杂性,用Buildout的方法进行斗争并不有趣。一旦我感觉舒服,我可能会把它介绍给我们的团队,但现在不行,它太脆弱了。除了在我们的项目根目录中有bin dir之外,我不知道它比pip.Hm有什么优势。。Buildout=fabric+virtualenv+pip我不提倡Buildout,它是一种选择。被认为是一种更成熟、更明确的管理依赖关系、环境的方法。不容易出现人为错误!我自己使用pip+virtualenv,想试试Buildout。