我需要为我的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.platform
和sys.version
的输出。
您可能还需要将lib
添加到搜索路径中,以确保python解释器能够找到您放入其中的模块。为此,您可以使用内置sys
模块中的sys.path.append('path/to/lib')
。