2012-11-08 82 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」' –

相關問題