我的任务是打包和运送商业应用程序包,其中包括:
该 bundle 已发布到 Linux、OSX 和 Windows。在 Linux 上,它以简单的 tar.gz 形式分发。用户只需在 .bashrc 中解压 tar.gz 和 source 提供的 bash 脚本,以便正确设置环境。在mac上,它是一个dmg。在windows上,我不知道。 windows 的家伙今天不在,但我看到的是一个 exe 以某种方式创建。
我现在将更详细地解释以上几点。
我们的 Python 库
我们不想提供源代码,所以我们只想提供编译后的 python 文件。欢迎使用更好的策略来使它们更加防篡改,即使它涉及一些深度黑客攻击(例如,我曾经看到魔术从一个“损坏”的临时文件中导入东西)。目前该库没有 C 级代码或类似的平台相关代码,但这很快就会改变。因此,我们必须提供特定平台编译的 .so 以及 pyc。
很明显,这个库将与我们的应用程序的其余部分一起提供。因此,它将安装在下载的 bundle 中。出于这个原因,它必须是完全可重定位的,并且用户必须以某种方式(手动或通过我们的 env 脚本)将解压缩包的位置添加到 PYTHONPATH,以便解释器可以找到它。
我们的 Python 程序
我们将在 bundle 中发布应用程序,这些应用程序将依赖于我们的库。这些应用程序的代码必须要么对用户可见(以便他可以学习如何使用库接口(interface)),要么不可见(对于那些我们希望保持封闭源代码的实用程序),因此需要双重方法。
其他库
我们的库依赖于我们必须发布的第 3 方库,以便用户启动并运行而无需任何依赖搜索。显然,这些库将由我们在 bundle 中安装,但我们必须希望它们不会在构建过程中将安装路径存储在某处,因为这会使它们不可重定位。
我们的 python
我们将发布我们的 python 版本,我们假设用户将运行它以访问我们的脚本。这是因为我们要确保 python 版本正在运行。此外,我们可能会修改一些可执行文件或标准库。我们可能担心此 python 与标准 python 的交互,如果用户想要在我们的 python 上使用特定库,则必须将其安装在我们的 bundle 中,而不是库的标准位置。
请求
我需要认真考虑这项任务。我已经看到它完成了,但从未亲自做过,所以我需要你的观点。我上面介绍的是我认为事情应该如何运作,根据现在的运作方式,但它可能是错误的。欢迎任何成功部署的提示、怪癖、建议或策略。鉴于问题的复杂性,我已经根据我能得到的最佳答案宣布了高额赏金。
最佳答案
这不是一个完整的答案,而只是一堆想法。我为客户编写了一个安装程序,其中包含了一些可能对您有用的想法。
它只是 Linux,所以我只专注于它。我们需要发布特定的自定义版本的 mySQL、lighttpd、python、memcached、一些第 3 方 Python 模块和一些自定义脚本。我们需要毫无问题地启动所有这些服务,并让用户使用常规的初始化脚本来控制它们。它应该在一堆流行的发行版上运行良好,因此不应该依赖发行版特定的东西。
我所做的如下。
deb-bootstrap 以创建自定义 Debian 安装。/etc/init.d 和一些脚本会在开始时设置数据库和东西。 /opt 中,在目录中 chroot 并运行一个设置脚本,该脚本会询问用户一些问题,如 db 用户名/密码等并进行设置。之后,它将获取我在第 5 步中提到的脚本并将它们放在主机操作系统上。initscripts 会简单地 chroot 进入分区并启动 supervisord。然后它将负责启动我们关心的所有服务。关闭应用程序只需连接到正在运行的 supervisord 并运行一个命令。我们将其包装在 initscript 中,以便用户体验类似于 UNIX。
现在,我们将为客户端提供自解压 .run 文件。他们会运行它,被问到几个问题,它会在 /opt 下创建一个目录,其中包含我们的应用程序及其所有依赖项。初始化脚本将被修改以在启动时启动我们的应用程序,并且一切都会按预期工作。
我认为第 4 步让您可以随意安装任何您想要的东西,以便一切正常。
关于python - 以专业的方式打包和发送 python 库和脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5661385/
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参
rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
我的工作要求我为某些测试自动生成电子邮件。我一直在四处寻找,但未能找到可以快速实现的合理解决方案。它需要在outlook而不是其他邮件服务器中,因为我们有一些奇怪的身份验证规则,我们需要保存草稿而不是仅仅发送邮件的选项。显然win32ole可以做到这一点,但我找不到任何相当简单的例子。 最佳答案 假设存储了Outlook凭据并且您设置为自动登录到Outlook,WIN32OLE可以很好地完成此操作:require'win32ole'outlook=WIN32OLE.new('Outlook.Application')message=