如何将 Python 程序部署到脱机的计算机?



我开发了一个用于文件验证的小型python应用程序。我需要将它部署到一个没有外部互联网接入的服务器上。它使用了许多库(pandas、glob、os、datetime、pyodbc和numpy(。

我能够在服务器上安装Python 3.8.5,并尝试使用Pyinstaller将包括库在内的所有内容打包到一个可以在服务器上运行的漂亮的exe中,但它不起作用。我正在使用--onefile标志再次尝试。下面的错误消息:

Traceback (most recent call last):
File "BDWtoStuckyValidation.py", line 2, in <module>
import pandas as pd
File "C:Program FilesPython38libsite-packagespandas__init__.py", line 16, in <module>
raise ImportError(
ImportError: Unable to import required dependencies:
dateutil: No module named 'dateutil'

服务器完全离线——我不能简单地使用PIP来安装丢失的库。此外,我的工作电脑非常锁定,所以我也不能简单地下载WHL文件或类似文件,然后手动将其安装在服务器上。任何必须传输到服务器的东西都需要在我的个人笔记本电脑上下载,通过蓝牙传输到我的工作笔记本电脑,然后通过网络传输到服务器。我只是在一台可以上网的机器上为我需要的模块运行了pip下载,将whl文件捆绑到一个tar.gz文件中,并将其传输到有问题的服务器,但在尝试运行pip-install tar.gz更新时,它仍然无法安装:我解压缩了tar.gz文件,并试图手动安装一些whl文件,它在pandas上卡住了,试图下载一些东西或连接到pypi.org,但显然不能。

如有任何帮助,我们将不胜感激。

您描述的过程应该可以工作,但您需要确保获得所有间接依赖项(直接依赖项所依赖的东西(。一个很好的方法是通过像pipcompile这样的工具(pip工具的一部分(,在那里你可以在requirements.in文件中声明你的直接需求,并让它计算出依赖项和版本的完整列表(通常写入requirements.txt(。一旦你有了这个列表,你就可以下载所有合适的轮子文件,然后按照你描述的进行。

它不适用于.tar.gz文件的原因是,pip希望.tar.gz文件是单个包的源发行版,而不是许多包的一堆不同轮子文件的tarball。

最新更新