Python将外部模块编译到项目文件夹中



我需要为我的uni提交一个涉及图的作业。由于允许使用外部模块,我使用networkx来完成任务,我需要将算法提交给在线检查器,看看我的解决方案是否适用于不同的输入。问题是,我需要提交一个zip,其中包含我的代码和/lib子文件夹中的库。我所做的是执行networkx的setup.py,我从构建文件夹中复制了lib文件夹,并将其放在我的项目zip中,但网站告诉我:错误

所以我的最后一棵树是

-文件.py

-lib/networkx/。。。。

有人知道如何解决这类问题吗?

tl/drpython -m pip install -I --only-binary=":all:" --target lib networkx,然后将import sys; sys.path.append('path/to/lib')添加到脚本中。


问题是,为了让networkx正常工作,您需要在lib中包括它的所有依赖项以及它们的所有依赖项。不幸的是,运行setup.py并不能为您做到这一点,而且并非所有这些依赖项都能在所有平台上工作。例如,networkx的一个依赖项是numpy,它是用C而不是python实现的,并且必须针对不同的目标体系结构单独编译。

所有这些复杂性说明了Python程序通常不以这种方式分发的原因。如果你的程序检查器可以访问互联网,最简单的解决方案是在你的程序中添加几行,通过pip安装networkx。

如果不能通过internet安装软件包,可以使用以下命令在lib目录中预构建networkx及其依赖项。

python -m pip install -I --only-binary=":all:" --target lib networkx

-I选项是忽略计算机上已安装的程序包。这应该确保所有必要的依赖项最终都出现在lib中。您可能需要使用--platform--python-version标志来确保在线检查器获得正确版本的networkx及其依赖项。如果您不知道在线检查器使用的平台或python版本,请在尝试导入networkx之前,在程序中添加几行以打印sys.platformsys.version的输出。

您可能还需要将lib添加到搜索路径中,以确保python解释器能够找到您放入其中的模块。为此,您可以使用内置sys模块中的sys.path.append('path/to/lib')

最新更新