Python中执行setup.py install后安装的包无法导入怎么办?

本人试用 python 打包工具 setuptools

使用 python setup.py install 安装本地创建的测试项目 topackage:

console 的日志如下: running install running bdist_egg running egg_info writing topackage.egg-info\PKG-INFO writing dependency_links to topackage.egg-info\dependency_links.txt writing top-level names to topackage.egg-info\top_level.txt reading manifest file 'topackage.egg-info\SOURCES.txt' reading manifest template 'MANIFEST.in' writing manifest file 'topackage.egg-info\SOURCES.txt' installing library code to build\bdist.win-amd64\egg running install_lib running build_py creating build\bdist.win-amd64\egg creating build\bdist.win-amd64\egg\pack copying build\lib\pack\prt.py -> build\bdist.win-amd64\egg\pack copying build\lib\pack_init_.py -> build\bdist.win-amd64\egg\pack byte-compiling build\bdist.win-amd64\egg\pack\prt.py to prt.cpython-35.pyc byte-compiling build\bdist.win-amd64\egg\pack_init_.py to init.cpython-35.pyc creating build\bdist.win-amd64\egg\EGG-INFO copying topackage.egg-info\PKG-INFO -> build\bdist.win-amd64\egg\EGG-INFO copying topackage.egg-info\SOURCES.txt -> build\bdist.win-amd64\egg\EGG-INFO copying topackage.egg-info\dependency_links.txt -> build\bdist.win-amd64\egg\EGG-INFO copying topackage.egg-info\top_level.txt -> build\bdist.win-amd64\egg\EGG-INFO zip_safe flag not set; analyzing archive contents... creating 'dist\topackage-0.1-py3.5.egg' and adding 'build\bdist.win-amd64\egg' to it removing 'build\bdist.win-amd64\egg' (and everything under it) Processing topackage-0.1-py3.5.egg Removing d:\python35\lib\site-packages\topackage-0.1-py3.5.egg Copying topackage-0.1-py3.5.egg to d:\python35\lib\site-packages topackage 0.1 is already the active version in easy-install.pth

Installed d:\python35\lib\site-packages\topackage-0.1-py3.5.egg Processing dependencies for topackage==0.1 Finished processing dependencies for topackage==0.1

安装完成后: 进入 python console 界面,输入 import topackage ,提示 topackage 找不到..


Python中执行setup.py install后安装的包无法导入怎么办?

5 回复
  • _ + 找到原因了。安装的项目,但是导入的时候不能导入项目名称而应该选择项目下的包名。
    比如我这里的目录结构:
    topackage
    |
    —pack

遇到这种问题,先别慌,多半是路径或者安装方式的问题。我来给你几个排查步骤和解决方案。

首先,最直接的方法,检查包到底装到哪去了。在终端里执行这个:

python -c "import sys; print(sys.path)"

看看输出的路径列表里,有没有你的包安装的位置(比如 site-packages 目录)。如果没有,那 Python 当然找不到。

情况一:用了 develop 模式 如果你是用 python setup.py develop 安装的,它只是在你的项目目录创建了个链接。检查你的 setup.py 文件结构对不对,特别是 packages 参数有没有正确配置。可以试试重新安装:

python setup.py develop --uninstall
python setup.py develop

情况二:直接 install 但找不到 如果用了 python setup.py install,先确认安装过程没报错。然后手动找一下:

# Unix/Linux/Mac
find /usr/local/lib -name "你的包名*" 2>/dev/null
# 或者用户目录
find ~/.local -name "你的包名*" 2>/dev/null

# Windows 可以在Python安装目录下搜

如果找到了但不在 sys.path 里,可以临时添加:

import sys
sys.path.append('/找到的路径')
import 你的包

情况三:虚拟环境问题 如果你在用 virtualenv 或 conda,确保安装时激活了正确的环境。常见错误是在全局 Python 里安装,却在虚拟环境里导入。检查终端提示符,或者用 which python / where python 确认。

情况四:setup.py 写得有问题 检查你的 setup.py,确保基本配置正确:

from setuptools import setup, find_packages

setup(
    name='你的包名',
    version='0.1',
    packages=find_packages(),  # 自动查找包
    # 或者手动指定
    # packages=['你的主包', '你的主包.子包'],
)

如果包结构复杂,find_packages() 可能漏掉,可以手动指定 packages 列表。

最后的大招 如果以上都不行,直接用 pip 安装当前目录:

pip install -e .

这个命令结合了 install 和 develop 的优点,通常最靠谱。

总结建议:优先用 pip install -e . 替代 setup.py install

上一条操作失误,直接飞出去了…找不到 V2EX 的删除评论按钮…重新来一发

+ _ + 找到原因了。安装的项目,但是导入的时候不能导入项目名称而应该选择项目下的包名。
比如我这里的目录结构:
topacakge
|
|—pack
| |- prt.py
| |-init.py
|—READM.rst
|—MANIFEST.in
|—setup.py

安装的时候在 topackage 目录下:
python setup.py install
导入包的时候使用:
import pack.prt
或者 import pack

=======================
小白的青涩领域与记忆

青涩领悟…

倒入的包名字问题 十有八九是这样

回到顶部