1
23
python代码的开发和部署通过 setuptools 与 virtualenv 和 pip . 核心理念我发现,最棘手的部分是运行一个开发环境,尽可能地反映部署的设置,同时尊重pythonic工具和习惯用法。但事实证明,使用pip和setuptools很容易实现这一点,它们一起允许您在不移动文件的情况下将开发树“安装”到Python环境中。(实际上,SETUPTOOLS本身就可以做到这一点,但PIP更好地充当前端句柄依赖项。) 另一个关键问题是在两个环境中准备一个具有已知包集的干净环境。在这方面,python的virtualenv是上帝派来的,它允许您使用自己选择的包来配置一个完全定制的python环境,而不需要根访问或操作系统包(rpm或dpkg),也不受安装在您的发行版上的任何包及其版本的约束。 最后,一个令人讨厌的bug熊是很难创建命令行脚本,这些脚本可以很好地使用Python路径。安装工具也非常优雅地处理了这个问题。 设置(为了简单起见,这是相当规范的。如有分歧,请自由选择。)
发展一旦您的树结构准备好了,您就可以开始编码了。但是现在,相互依赖的包在部署的环境中看不到彼此。这个问题是通过安装工具提供的一个简单的小技巧来解决的,并且PIP利用了这个技巧。对于正在开发的每个包,运行以下命令(确保您处于项目的虚拟环境中,如上面的步骤3所示):
此命令将安装
它通常可以工作,但是如果您有第三方依赖项(如说明所示,它应该列在setup.py中) here 在SETUPTOOLS文档中),PIP更聪明地找到它们。
需要注意的一点是,无论是安装工具还是PIP,都不能在自己的包中找到依赖关系。如果目录B中的pkgb依赖目录A中的pkga,则
此时,您可以启动python,加载其中一个模块并开始使用它。您可以编辑代码,下次导入时它将立即可用。 最后,如果您想用您的包创建命令行工具。不要手写。最后你会遇到一堆糟糕的python-path黑客,它们从来都不能正常工作。只读 automatic script creation 在设置工具文档中。这会让你省去很多悲伤。 部署当包准备好执行操作时,可以使用setup.py创建部署包。这里有太多的选项可供选择,但您应该先了解以下内容:
松端
由于问题的广泛性,这个答案必然是不完整的。我没有处理长时间运行的服务器、Web框架或实际的部署过程本身(特别是使用pip安装
|
2
6
这真的不难。你主要需要和 buildout 和 supervisord 国际海事组织 虽然学习增强可能需要一点时间,但它是值得的,考虑到痛苦的数量,它减少了重复设置。 关于NOHUP: nohup方法不适用于严重的部署。我在主管方面有很好的经验。它是运行生产python应用程序的优秀解决方案。它很容易设置。 下面是一些具体的答案。
|
3
5
我一直在努力为我们的工作项目实现这一点。这涉及到几个不同的部分。 首先,我们使用virtualenv.py的引导功能定制virtualenv.py,以添加您自己的自定义post创建函数和标志。这些允许我们定义常见的项目类型,并给我们一个命令来创建一个新的virtualenv,从git存储库签出一个项目,并使用pip和requirements.txt将任何需求安装到virtualenv中。 文件夹。 所以我们的命令如下: python venv.py--无站点包-g$git_proj-t$tag_num$venv_dir http://pypi.python.org/pypi/virtualenv http://pip.openplans.org/ 现在,我们通过了对现有项目的初始检查。在我们工作和更新项目时,我们在每个项目中使用fabric命令来构建版本,然后部署它们: http://docs.fabfile.org/0.9.0/ 我有一个fab命令:make_标记,用于检查未使用的提交,打开需要更新版本字符串的文件,构建和上载sphinx文档,然后将最终标记提交到存储库。 另一方面是fab deploy命令,它将通过ssh执行指定标记的git co,对任何新需求运行pip更新,运行所需的任何数据库迁移,然后在这是Web应用程序时重置Web服务器。 使用谷歌代码搜索,你可以浏览大量优秀的结构文件。我知道我骗了几张供自己使用。 为了让事情顺利进行,它肯定很复杂,有几个部分。一旦你让它运转起来,它的灵活性和速度是非常棒的。 |
4
2
看一看 Buildout 用于可复制的部署。 |
5
0
另一个对织物的投票(还没有尝试扩建)。我们已经成功使用它几个月了。 如果织物有问题,另一个选择是 Capistrano . 效果很好(即使对于非Rails应用程序也是如此)。只是因为使用Ruby部署python应用程序感觉很奇怪而停止使用它;) |
6
0
我将使用rsync从生产“prime”服务器向外同步到其他服务器,从“beta测试”平台向外同步到生产“prime”服务器。 rsync的好处是只复制那些更改过的文件,只复制部分更改过的文件的一部分,并在所有计算机上最后验证完整性和相同的内容。稍后可以轻松地继续一个部分完成并中断的更新,从而使部署更加健壮。 在这种情况下,颠覆或反复无常也不是一个坏主意。Mercurial拥有 允许您“拉”或“推”的优势,而不仅仅是从一个中心源进行更新。您可能会发现一些有趣的案例,其中分散模型(mercurial)工作得更好。 |
7
0
如果你是一个建筑工人,那么你应该知道 minitage.recipe.scripts 能够生成一个文件来设置您的Python环境。源到您的Web服务器和您的构建是完全可移植的。 |
8
0
听起来你想要的是一个构建脚本。因此,使用shell、python、ant或您最喜欢的构建工具编写一个。如果您不喜欢用XML编写, pant 允许您用Python编写Ant脚本。有几个人提到 buildout 但我对此没有任何经验。 首先定义你的步骤。听起来你想:
如果您正在进行负载平衡或依赖于其他服务生产,那么您可能希望找到一种方法来扩展有限的范围,这样您的所有客户就不会同时受到影响。如果您有一个类似生产的登台环境,那么它也可以满足您的需求。 |
July · 如何定义数字间隔,然后四舍五入 1 年前 |
user026 · 如何根据特定窗口的平均值(行数)创建新列? 1 年前 |
Ashok Shrestha · 需要追踪特定的颜色线并获取坐标 1 年前 |
Nicote Ool · 在FastApi和Vue3中获得422 1 年前 |
Abdulaziz · 如何对集合内的列表进行排序[重复] 1 年前 |
asmgx · 为什么合并数据帧不能按照python中的预期方式工作 1 年前 |