- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 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 (likemath
) 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 setup
、python -m pip
、python -m http.server
)。在这种情况下,Python 将在 sys.path 指向的目录中查找指定的模块。这就是为什么 setuptools
/setup.py
和 pip
将软件包安装在一个位置(如果一切配置正确)位于 中sys.path
.
我建议您自己查看存储在 sys.path
中的值,例如使用以下命令:python -c "import sys; print(sys.path) “
。
关于python - setuptools 如何向运行时添加模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57877958/
我是一名优秀的程序员,十分优秀!