【问题标题】:ImportError: No module named after installing my pypi packageImportError:安装我的 pypi 包后没有命名模块
【发布时间】:2017-12-13 14:18:05
【问题描述】:

到主目录中的vim .pypirc。

[distutils]
index-servers=pypi

[pypi]
repository = https://upload.pypi.org/legacy/
username = xxxx
password = xxxx

目录结构。

tree /tmp/getHello
/tmp/getHello
├── getHello
│   └── getHello.py
├── README.rst
└── setup.py

getHello.py。

cat /tmp/getHello/getHello/getHello.py
def say(something):
    print(something)

tmp/getHello/setup.py.

cat /tmp/getHello/setup.py
from setuptools import setup, find_packages
from codecs import open
from os import path
here = path.abspath(path.dirname(__file__))
with open(path.join(here, 'README.rst'), encoding='utf-8') as f:
    long_description = f.read()
setup(
    name='getHello',
    version='1.0.0',
    description='getHello',
    long_description=long_description,
    url='https://upload.pypi.org/legacy/getHello',
    author='The Python Packaging Authority',
    author_email='pypa-dev@googlegroups.com',
    license='MIT',
    classifiers=[
        'Development Status :: 3 - Alpha',
        'Intended Audience :: Developers',
        'Topic :: Software Development :: Build Tools',
        'License :: OSI Approved :: MIT License',
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.4',
        'Programming Language :: Python :: 3.5',
        'Programming Language :: Python :: 3.6',
    ],
    keywords='sample setuptools development',
    packages=find_packages(exclude=['contrib', 'docs', 'tests'])
)

现在制作 pypi 包。

cd  /tmp/getHello
python3  setup.py sdist build
python3  setup.py bdist_wheel --universal

列出文件树。

tree
.
├── build
│   └── bdist.linux-x86_64
├── dist
│   ├── getHello-1.0.0-py2.py3-none-any.whl
│   └── getHello-1.0.0.tar.gz
├── getHello
│   └── getHello.py
├── getHello.egg-info
│   ├── dependency_links.txt
│   ├── PKG-INFO
│   ├── SOURCES.txt
│   └── top_level.txt
├── README.rst
└── setup.py

上传源文件和whl文件。

python3  setup.py  sdist upload
python3  setup.py  bdist_wheel upload

现在我的 pypi 帐户中有两个文件:getHello-1.0.0-py2.py3-none-any.whlingetHello-1.0.0.tar.gz

使用 pip 安装包。

sudo pip3 install getHello

getHello 一切准备就绪。

python3
import getHello

这里出现错误:

ImportError: No module named 'getHello'

为什么 getHello.py 不能打包到 getHello-1.0.0-py2.py3-none-any.whlingetHello-1.0.0.tar.gz 中? 如何将getHello.py打包成getHello-1.0.0-py2.py3-none-any.whlingetHello-1.0.0.tar.gz

【问题讨论】:

    标签: python importerror pypi


    【解决方案1】:

    getHello 中添加__init__.py

    cd  getHello/getHello
    vim  __init__.py
    from getHello.say import say
    

    【讨论】:

      【解决方案2】:

      Python 可能会尝试从树中的“getHello”子目录(或 getHello.py 文件)导入,而不是从刚刚安装的包中导入。

      Python 查找和加载模块的方式有时会令人惊讶。见:https://docs.python.org/3/reference/import.html#searching

      在 Python 解释器中使用 -v 命令行选项来查看到底发生了什么。

      为避免对导入的内容产生混淆,请从另一个目录(没有 getHello 子目录或名为 getHello.py 的文件的目录)启动 Python 解释器。

      【讨论】:

        猜你喜欢
        • 2019-07-09
        • 2020-09-25
        • 1970-01-01
        • 2015-01-21
        • 2010-11-29
        • 2019-10-28
        • 2014-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多