如何修改项目结构与setup.py实现from my_lib导入指定模块?
解决方案
问题核心是当前你的库安装后,module1和module2直接处于site-packages根目录,是顶级模块,没有被包裹在my_lib父包结构下,因此无法通过from my_lib import ...的方式导入。需要调整项目结构并配置包的导出逻辑:
1. 调整项目目录结构
将所有子模块和原根目录的__init__.py移动到一个名为my_lib的新目录下,最终结构如下:
└───my_lib ├───module1 │ ├───__init__.py │ └───mod_1.py ├───module2 │ ├───__init__.py │ └───mod_2.py └───__init__.py setup.py
注意:原根目录下的
__init__.py要移到my_lib目录内,根目录仅保留setup.py。
2. 配置my_lib/__init__.py
在my_lib目录的__init__.py中添加导入语句,将mod_1和mod_2暴露到my_lib的命名空间下,这样就能直接通过from my_lib import mod_1, mod_2导入:
# my_lib/__init__.py from .module1 import mod_1 from .module2 import mod_2
如果需要直接导入模块内的具体类或函数,可改为:
from .module1.mod_1 import 目标类名/函数名 from .module2.mod_2 import 目标类名/函数名
3. 重新安装库
先卸载已安装的旧版本:
pip uninstall my_lib -y
再重新安装修改后的库:
pip install .
完成后,site-packages内的目录结构会变为:
.\Python\Python312\Lib\site-packages └───my_lib ├───module1 │ ├───__pycache__ │ ├───__init__.py │ └───mod_1.py ├───module2 │ ├───__pycache__ │ ├───__init__.py │ └───mod_2.py └───__init__.py └───my_lib-1.0.0.dist-info ├───direct_url.json ├───INSTALLER ├───METADATA ├───RECORD ├───REQUESTED ├───top_level.txt └───WHEEL
此时就能正常使用from my_lib import mod_1, mod_2语句导入模块了。
内容的提问来源于stack exchange,提问作者Gооd_Mаn
相关产品推荐
相关产品推荐

