2012-11-08 58 views
9

我正在编写一个简单的IronWorker in Python以使用AWS API进行一些工作。如何在IronWorker中捆绑Python依赖关系?

为此,我想使用通过PiPy分发的boto library。在IronWorker运行时环境中,缺省情况下未安装boto库。

如何将我的IronWorker代码绑定到boto库依赖性?

理想的情况下,我希望我可以使用类似的gem dependancy bundling available for Ruby IronWorkers - 即myRuby.worker指定

gemfile '../Gemfile', 'common', 'worker' # merges gems from common and worker groups 

Python Loggly sample,我看到胡佛库用于:

#here we have to include hoover library with worker. 
hoover_dir = os.path.dirname(hoover.__file__) 
shutil.copytree(hoover_dir, worker_dir + '/loggly') #copy it to worker directory 

然而,我看不到你在哪里/如何指定你想要的hoover库版本,或者从哪里下载它。

什么是在Python IronWorkers中使用第三方库的官方/正确方法?

回答

6

我们已经在我们的工具集上工作了一下,因为这个答案已经被编写和接受。 answer from my colleague below是推荐的课程。[/编辑]

我为IronWorker编写了Python客户端库。我也受雇于Iron.io.

如果您使用的是Python客户端库,那么执行此操作最简单(也是最推荐)的方法就是复制库安装的文件夹,并在上传包时包含它。这就是Python Loggly示例在上面所做的。正如你所说,这并没有指定版本或从哪里下载库,因为它不关心。它只需要安装在您的系统上并使用它。无论您在本地计算机上输入“import boto”,都会上传什么内容。

另一种选择是使用我们的CLI上传您的工人,其中.worker file

要做到这一点,下面是你需要做的:

创建botoworker.worker文件:

runtime "binary" 
build 'pip install --install-option="--prefix=`pwd`/pips" boto' 
file 'botoworker.py' 
exec "botoworker.sh" 

也就是说第二行是将运行安装的依赖画中画命令。您可以像修改命令行中的任何pip命令一样对其进行修改。它将在“构建”阶段在worker上执行该命令,因此它只会执行一次,而不是每次运行任务。

第三行应该更改为您要运行的Python文件 - 这是您的Python工作文件。下面是我们用来测试这个一:

import boto 

如果您保存,作为botoworker.py,上面应该没有任何修饰工作。 :)

第四行是一个实际运行你的工作的shell脚本。我已经包含了我们在下面使用的那个。只需将它保存为botoworker.sh,就不用担心修改上面的.worker文件。

PYTHONPATH="$HOME/pips/lib/python2.7/site-packages:$PYTHONPATH" python botoworker.py "[email protected]" 

你会发现它是指你的Python文件 - 如果你不命名你的Python文件botoworker.py,记得要在这里改变这一点。所有这一切都是将您的PYTHONPATH设置为包含已安装的库,然后运行您的Python文件。

要上传这个文件,只需确保你已经安装了CLI(gem install iron_worker_ng,确保你的Ruby版本是1.9.3或更高版本),然后在你的shell中运行“iron_worker upload botoworker” botoworker.worker文件在。

希望这有助于!

+0

+1这应该是在铁工文档! –

+0

@KevinSimper我们正在努力。 :)我们的团队迭代速度很快,这让我们的文档团队(这是我的责任)难以跟上。不过,我们正在研究一些应该让这一切变得更好的东西。 – Paddy

+1

凯文 - 没有必要。我们很快就会在.worker中提供'pip'命令支持。 – iced

13

较新的iron_worker版本具有本地支持pip命令。 所以,你需要:

runtime "python" 
exec "something.py" 

pip "boto" 
pip "someotherpip" 

full_remote_build true 
+2

如果你想固定到一个特定的版本,它看起来像你需要做一些事情:'pip“boto”,“== 2.9.2”' –

相关问题