You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整Python库配置实现直接import而非from...import导入

解决直接import mylib的导入问题

你的问题核心在于:当前mylib包的实际功能代码放在了子模块mylib/mylib.py里,而Python导入包时默认只会加载包的__init__.py文件,不会自动导入子模块的内容。所以现在需要通过调整包的结构或__init__.py来让import mylib直接能访问到你的功能代码。

下面是两种简单有效的解决方法:

方法一:通过__init__.py导出子模块内容

这是最推荐的方式,既能保留现有文件结构,又能实现直接导入:

  1. 在mylib文件夹下创建(如果没有的话)__init__.py文件
  2. 在__init__.py中导入mylib.py里的内容,示例如下:
    # mylib/__init__.py
    # 导入所有内容(适合小型库)
    from .mylib import *
    
    # 或者指定导出特定的类/函数(更规范,避免命名冲突)
    # from .mylib import YourClass, your_function
    

这样当用户执行import mylib时,Python会自动把mylib.py里的内容加载到mylib包的命名空间中,用户就能直接用mylib.xxx调用功能了。

方法二:合并代码到__init__.py

如果你的库结构比较简单,可以直接把mylib/mylib.py里的所有代码移到mylib/__init__.py中,然后删除mylib.py。调整后的目录结构如下:

cool-library
├── README.md
├── setup.py
├── mylib
│   ├── __main__.py
│   └── __init__.py

这种方式更直接,import mylib会直接加载__init__.py里的所有代码,完全符合你的需求。

注意事项

  • 不需要修改setup.py里的packages=["mylib"],这个配置是正确的(之前尝试的package_dir={'':'mylib'}会打乱包的路径,所以才没生效)
  • 如果你的__main__.py里有调用mylib.py的代码,只需要保持原路径(比如from .mylib import main)即可,不影响包的运行
  • 修改完成后,记得更新版本号,重新构建并上传到PyPI

内容的提问来源于stack exchange,提问作者Peter S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:30:22