已通过pip成功安装PyPi模块fakesky,但无法导入该模块求助
问题原因及解决步骤
核心问题:包结构与setup.py配置不匹配
你当前的src目录下直接存放fakesky.py,但find_packages('src')只会识别包含__init__.py的子目录作为Python包,导致打包时未正确将fakesky.py纳入包结构,安装后自然找不到模块。
另外还有两个次要问题:
- setup.cfg中指定的描述文件、许可证文件与实际文件名不符
- 必要数据文件
results_BB.txt未被打包进安装包
具体修复方案
方案1:调整目录结构(推荐)
把src下的文件放到名为fakesky的子目录中,让结构符合标准包格式:
fakesky -> setup.py setup.cfg README.txt LICENSE src -> fakesky -> __init__.py fakesky.py results_BB.txt
修改setup.py,确保正确识别包并打包数据文件:
from setuptools import setup, find_packages setup( name='fakesky', version='1.0.2', license='CC0 1.0', author="Drew Weisserman", author_email='drewweis@umich.edu', packages=find_packages('src'), package_dir={'': 'src'}, url='https://github.com/drewweis/fakesky', keywords='sky image', install_requires=[ 'matplotlib', 'numpy', 'pandas', 'scipy', 'astropy' ], # 打包必要的数据文件 package_data={ 'fakesky': ['results_BB.txt'], }, include_package_data=True, )
方案2:不调整结构,改用py_modules
如果不想修改目录结构,将setup.py中的packages=find_packages('src')替换为py_modules=['fakesky'],同时添加数据文件配置:
from setuptools import setup setup( name='fakesky', version='1.0.2', license='CC0 1.0', author="Drew Weisserman", author_email='drewweis@umich.edu', py_modules=['fakesky'], package_dir={'': 'src'}, url='https://github.com/drewweis/fakesky', keywords='sky image', install_requires=[ 'matplotlib', 'numpy', 'pandas', 'scipy', 'astropy' ], # 打包数据文件 data_files=[('', ['src/results_BB.txt'])], )
修复setup.cfg的文件路径错误
将setup.cfg内容修改为与实际文件名一致:
[metadata] description-file=README.txt license_files=LICENSE
重新打包上传
- 删除旧的
dist目录 - 重新生成源码包:
python3 setup.py sdist - 上传新包:
twine upload dist/* - 重新安装测试:
之后尝试导入pip uninstall -y fakesky pip install fakeskyfakesky即可正常使用。
内容的提问来源于stack exchange,提问作者tgs123
相关产品推荐
相关产品推荐

