我正在编写一个简单的IronWorker in Python来使用AWS API进行一些工作。
为此,我想使用通过PiPy分发的boto library。默认情况下,IronWorker运行时环境中不安装boto库。
如何将boto库依赖项与IronWorker代码捆绑在一起?
理想情况下,我希望我可以使用类似gem dependancy bundling available for Ruby IronWorkers的东西-即在myRuby.worker中指定
gemfile '../Gemfile', 'common', 'worker' # merges gems from common and worker groups在Python Loggly sample中,我看到使用了hoover库:
#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中使用第三方库的官方/正确方式是什么?
发布于 2012-11-09 03:20:09
编辑自从这个答案被编写并被接受以来,我们已经对我们的工具集做了一些工作。answer from my colleague below是未来的推荐课程。/edit
我为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命令。您可以像从命令行运行任何pip命令一样对其进行修改。它将在“构建”阶段对worker执行该命令,因此它只执行一次,而不是每次运行任务时都执行。
第三行应该更改为您想要运行的Python文件--这是您的Python工作文件。下面是我们用来测试的代码:
import boto如果您将其另存为botoworker.py,则上面的代码无需任何修改即可工作。:)
第四行是一个shell脚本,它将实际运行您的worker。我已经包括了我们在下面使用的那个。只需将其另存为botoworker.sh,您就不必担心修改上面的.worker文件。
PYTHONPATH="$HOME/pips/lib/python2.7/site-packages:$PYTHONPATH" python botoworker.py "$@"您会注意到它引用了您的Python文件--如果您没有将您的Python文件命名为botoworker.py,请记住在这里也将其更改。所要做的就是将PYTHONPATH设置为包含已安装的库,然后运行Python文件。
要上传它,只需确保你已经安装了命令行工具(gem install iron_worker_ng,确保你的Ruby1.9.3或更高版本),然后在你的shell中运行"iron_worker upload botoworker“,从你的botoworker.worker文件所在的目录。
希望这能有所帮助!
发布于 2013-01-11 20:58:13
更新的iron_worker版本具有对pip命令的本机支持。因此,您需要:
runtime "python"
exec "something.py"
pip "boto"
pip "someotherpip"
full_remote_build truehttps://stackoverflow.com/questions/13285901
复制相似问题