gpt4 book ai didi

python - setuptools 如何向运行时添加模块?

转载 作者:太空宇宙 更新时间:2023-11-03 20:25:14 24 4
gpt4 key购买 nike

我是 Python 新手,对有关模块、包模块和导入的文档感到不知所措。

据我所知,没有“包”,只有模块和导入机制,官方推荐的高级 API 由 setuptools 提供,其 Distribution 类是驱动什么模块以及如何添加到运行时模块导入机制(sys.path?)的关键元素,但我迷失在事情的细节中。

我的理解是 setup.py 是一个普通的 Python 模块,它间接使用运行时 API 添加更多模块,同时在实际的“用户”代码之前执行。作为普通模块,它可以下载更多代码(如安装程序)、按拓扑排序依赖项、调用系统链接器等。

但具体来说,我很难理解:

  • setup.py 如何决定是否隐藏系统模块(如 math)
  • setup.py 如何配置导入机制,以免意外发生上述情况
  • 相比之下,-m 解释器标志如何工作?

为了简洁起见,我们假设仅使用最新的 CPython 和标准库。

编辑:

我发现是真实的,全局级别也是真实的,如 __import__ function 中所示。 。看来 setuptools 可以控制它们。

最佳答案

setuptools 帮助将代码打包成正确的格式(例如:setup.py build sdist bdist_wheel 构建可以从 PyPI 下载的文件),然后将此代码解压到正确的位置(例如:setup.py install 或间接 pip install),以便稍后可以通过 Python 自己的导入机制(通常是是的,该位置是 sys.path 指向的目录之一)。

<小时/>

我可能错了,但我不会这么说:

setup.py decides whether to shadow system modules (like math) or not

也不是:

setup.py configures the import mechanism so that above doesn't happen by accident

据我所知,这种情况很可能发生,没有什么可以阻止这种情况,而且这不一定是坏事。

<小时/>

How does -m interpreter flag work in comparison?

不是指示 Python 解释器通过 Python 文件的路径执行代码(例如:python ./setup.py),而是可以指示 Python 解释器执行 Python 模块(例如:python -m setuppython -m pippython -m http.server)。在这种情况下,Python 将在 sys.path 指向的目录中查找指定的模块。这就是为什么 setuptools/setup.pypip 将软件包安装在一个位置(如果一切配置正确)位于 中sys.path.

我建议您自己查看存储在 sys.path 中的值,例如使用以下命令:python -c "import sys; print(sys.path) “

关于python - setuptools 如何向运行时添加模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57877958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com