簡體   English   中英

如何使我的python腳本易於移植? 或者如何使用所有模塊依賴項編譯成二進制文件?

[英]How to make my python script easy portable? or how to compile into binary with all module dependencies?

有沒有辦法將python腳本編譯成二進制文件? 我有一個文件python腳本,它使用了很多模塊。 我想要的是在其他機器(freebsd)上復制它,但不在每個主機上安裝所有需要的模塊。

在這種情況下有哪些可能的解決方案

可以滿足您要求的程序包括:

  • PyInstaller: http ://www.pyinstaller.org/ [Windows,Linux,OS X]
  • cx_freeze: http ://cx-freeze.sourceforge.net/ [Windows,Linux]
  • py2exe: http ://www.py2exe.org/ [Windows]
  • py2app: http ://svn.pythonmac.org/py2app/py2app/trunk/doc/index.html [os x]

但如前所述,您還可以創建一個包含分發的包,並將其他包作為依賴項。 然后,您可以使用pip來安裝該軟件包,它將安裝所有軟件包。 但是你仍然需要安裝Python和pip。

cx_freeze會將您的python腳本附加到獨立的Python加載器,並生成包含該程序和共享庫依賴項的目錄。 然后,您可以將生成的分發復制到獨立於Python或模塊的其他計算機。

$ cat hello.py 
print "Hello, World!"
$ ls dist/
datetime.so  _heapq.so  hello  libpython2.6.so.1.0  readline.so
$ cat hello.py 
print "Hello, World!"
$ cxfreeze hello.py 
... <snip> ...
$ ls dist/
datetime.so  _heapq.so  hello  libpython2.6.so.1.0  readline.so
$ ./dist/hello
Hello, World!

一個更好的答案可能是創建一個PIP包,將這些第三個模塊標識為依賴項,因此安裝可以像“pip install mypackage; ./ package”一樣簡單

Python還會在當前目錄中查找import模塊,因此您不必將它們安裝到python目錄中。 您的分發文件結構可能如下所示:

main.py
module1/
    __init__.py, ...
module2/
    __init__.py, ...

其中main.py有import module1, module2 module1 import module1, module2

您可能希望從腳本中創建Python包。 最后,您可以在任何主機上執行pip install mypackage ,並自動下載和安裝所有必需的模塊。

請參閱有關如何創建此類包的此問題

暫無
暫無

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

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