簡體   English   中英

將python腳本+模塊捆綁/執行到遠程計算機

[英]bundling/executing python script + modules to a remote machine

我研究了其他python模塊分發問題。 我的需求有些不同(我認為!,我是python newbie +)

我有一堆需要在遠程計算機上執行的python腳本。 目標環境如下所示:

  • 這些機器將安裝基本的python運行時
  • 我將有一個SSH帳戶; 我可以使用ssh遠程登錄或執行命令
  • 我可以將文件(scp)復制到我的主目錄中
  • 我不允許在機器上安裝任何東西; 這些機器甚至可能無法訪問Internet
  • 我的腳本可能使用了一些“外來的” python模塊-很可能它們不會出現在目標計算機中
  • 審核后,我的主目錄將從計算機中刪除(不留任何痕跡)

所以我想做的是:

  • 將python腳本+模塊的目錄結構復制到遠程計算機(例如/ home / audituser / scripts中)。 並且可以將模塊復制到/ home / audituser / scripts / pythhon_lib)
  • 然后執行一個腳本(例如/home/audituser/scripts/myscript.py)。 該腳本將需要解析“ python_lib”子目錄中使用的所有模塊。

這可能嗎? 還是有更好的方法呢? 我想我正在尋找的是將第三方模塊“重新定位”到腳本目錄中。

提前致謝!

遠程機器彼此相同嗎? 而且,如果可以,您是否可以設置與遠程計算機實際上相同的開發計算機?

如果是這樣, virtualenv幾乎可以做到這一點。 在開發機器上創建virtualenv ,使用pipvirtualenv副本在其中安裝任何第三方模塊,在其中構建腳本,然后將整個環境復制到每台遠程機器。

有三件事使它可能變得不平凡:

  • 如果遠程計算機沒有(也不能)安裝virtualenv ,則需要執行以下操作之一:
    • 在許多情況下,只需復制--relocatable環境中通過只是工作。 請參閱“使環境可重定位”的文檔部分。
    • 您總是可以將virtualenv本身捆綁在一起,然后在每台計算機上pip install --user virtualenv (如果他們甚至沒有pip ,請在此之前執行幾個步驟)。 這將使用戶帳戶處於永久更改狀態。 (但幸運的是,您的用戶帳戶將被刪除,所以誰在乎?)
    • 您可以編寫自己的手動引導程序。 請參閱“創建自己的引導腳本”部分。
    • 默認情況下,您可以獲得比所需更多的東西-Python可執行文件,標准庫等。
    • 如果機器不同,則可能無法正常工作,或者至少效率不高。
    • 即使它們是,您仍然經常使束的數量級更大。
    • 請參閱有關在不使用bin / python的情況下使用Virtualenv的文檔部分,--system-site-packages以及可能的引導程序。
  • 如果您要安裝的任何Python模塊也需要C庫(例如, libxml2 for lxml ),則virtualenv對此無濟於事。 實際上,您將需要C庫幾乎完全相同(相同路徑,兼容版本)。

其他三種選擇:

  • 如果您的需求足夠簡單(或者最簡單的部分涉及virtualenv問題,例如安裝libxml2 ),那么將.egg / .tgz /任何文件捆綁到第三方模塊中可能會更容易,然后編寫一個腳本,對每個腳本執行pip install --user等操作,然后就完成了。
  • 僅僅因為您不需要一個完整的應用程序分發系統,並不意味着您不能使用一個系統。 py2apppy2execx_freeze等並不那么復雜,尤其是在簡單的情況下,擁有一個cx_freeze可執行文件進行復制比擁有一個明確的環境更加容易。
  • zc.buildout是一種非常靈活且易於管理的工具,可以完成三種選擇中的任何一種。 主要缺點是學習曲線要​​陡得多。

您可以使用virtualenv為您的項目創建一個獨立的環境。 這可以容納您自己的腳本以及任何依賴庫。 然后,您可以使環境可重定位( --relocatable ),並將其同步到目標計算機,激活它並運行腳本。

如果這些計算機確實具有網絡訪問權限(不是Internet,而是局域網),則您也可以將virtualenv放在共享位置並從那里激活。

看起來像這樣:

virtualenv --no-site-packages portable_proj
cd portable_proj/
source bin/activate
# install some deps
pip install xyz
virtualenv --relocatable .

現在portable_proj可以disted到其他機器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM