python - Python将外部模块编译到项目文件夹中
问题描述
我需要为我的大学提交一份涉及图表的作业。由于允许使用外部模块,我使用 networkx 来完成工作,我需要将算法提交给在线检查器,以查看我的解决方案是否适用于不同的输入。问题是我需要在 /lib 子文件夹中提交包含我的代码和库的 zip。我所做的是执行networkx的setup.py,我从build one复制了lib文件夹并将其放入我的项目zip中,但网站告诉我: 错误
所以我的最后一棵树是
-文件.py
-lib/networkx/....
有谁知道如何解决这类问题?
解决方案
tl/dr python -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 版本,请在您的程序中添加几行以打印输出,sys.platform
然后sys.version
再尝试导入 networkx。
您可能还需要添加lib
到搜索路径以确保 python 解释器可以找到您放入其中的模块。您可以为此使用sys.path.append('path/to/lib')
内置sys
模块。
推荐阅读
- c# - 自 Bitbucket 存储库变为私有后下载 GeckoFX 旧版本
- sqlite - 具有多个表的多个打开语句导致 SQLite 中的“SQL 逻辑错误”
- python - 将 dataframe.loc 与多个字符串一起使用
- python-3.x - AttributeError:“审核”对象没有属性“频道”
- python - 当我再次运行程序时,有没有办法可以阻止字典被清空?
- javascript - 在 for 循环中等待 image.onload
- rust - 为什么我在 Bevy 中进行变更检测的尝试从未触发?
- object - 如何获取工作表的对象名称?
- google-cloud-platform - 是否可以在 Google Linux VM 实例中运行 Carla 模拟器
- java - Kotlin - 无法在真实设备中获取位置地址