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

PyPI上传的pyutils39包安装后调用函数报AttributeError求助

问题原因

你遇到的AttributeError本质是Python包的导出规则问题,结合你的配置,具体有两个错误点:

  1. 你在setup.py中配置了packages=setuptools.find_packages(where="src"),说明打包的是目录形式的Python包;但你的函数都写在包内的pyutils39.py子模块里,没有在包的__init__.py中导出这些函数,默认导入顶层pyutils39包时,不会自动加载子模块的内容,所以找不到对应属性。
  2. setup.py中的py_modules=['/src/pyutils39/pyutils39.py']配置完全错误:路径以斜杠开头是绝对路径写法,不能用在这里;且py_modules是用于声明独立单文件模块的配置,和你用的packages配置冲突,属于冗余配置。
修复步骤

1. 确认项目目录结构

你的本地项目目录需要符合以下结构,缺失的__init__.py要新建:

项目根目录/
├── src/
│   └── pyutils39/
│       ├── __init__.py  # 初始为空即可,后续要加导出代码
│       └── pyutils39.py # 你写了reverse、consoleask函数的主文件
├── README.md
└── setup.py

2. 清理冗余错误配置

删除setup.py中的这一行:

py_modules=['/src/pyutils39/pyutils39.py'],

3. 配置包导出规则

在src/pyutils39/__init__.py中添加以下代码,将需要对外暴露的函数导出到顶层包:

from .pyutils39 import reverse, consoleask

如果你不想保留子模块层级,也可以直接把两个函数的代码放到__init__.py里,效果完全一致。

4. 重新发布验证

修改setup.py中的版本号(比如升级到0.1.4),重新打包上传到PyPI即可。安装新版本后你的测试代码就能正常运行。

额外说明

你把pyutils39.py放到测试文件同目录时运行正常,是因为此时导入的是单文件模块,而非目录形式的包,不需要走__init__.py导出规则,所以能直接调用函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:36:00