ModuleNotFoundError: 没有名为 <modulename> 的模块pip安装后 [英] ModuleNotFoundError: No module named &lt;modulename&gt; after pip install

查看:58
本文介绍了ModuleNotFoundError: 没有名为 <modulename> 的模块pip安装后的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 python 包分发中做了我的第一步.
不幸的是,从 pip 成功安装后,我遇到了 ModuleNotFoundError.

I do my first steps in python package distributions.
Unfortunately, I have ModuleNotFoundError after successful install from pip.

我的目录布局非常简单:

My dirs layout is pretty simple:

maindir
   |- setup.py
   |- pysoft
         |- __init__.py
         |- main.py
         |- pylib.py

main.py:

import pylib


def main():
    print("main program")
    pylib.libfunc()


if __name__ == '__main__':
    main()

pylib.py:

def libfunc():
    print("lib func")

setup.py:

import setuptools


setuptools.setup(
    name='pysoft',
    version='0.0.21',
    author='als',
    author_email='als@gnail.com',
    description='deploy tester',
    py_modules=['pylib'],
    packages=setuptools.find_packages(),
    python_requires='>=3.6',
    entry_points={
        'console_scripts': [
            'pysoft = pysoft.main:main',
        ],
    },
)

我打包并上传到test.pypi.org:

python3 setup.py sdist bdist_wheel
python3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*

我设置并启动新的 virtualenv 并安装我的包:

I setup and start new virtualenv and install my package:

 python3 -m pip install -i https://test.pypi.org/simple/ pysoft

然后我尝试运行它,但出现错误:

Then I try to run it, but got error:

pysoft 
Traceback (most recent call last):
  File "/home/fat/buff/tt/bin/pysoft", line 5, in <module>
    from pysoft.main import main
  File "/home/fat/buff/tt/lib/python3.6/site-packages/pysoft/main.py", line 1, in <module>
    import pylib
ModuleNotFoundError: No module named 'pylib'

你能找出我哪里出错了吗?

Could you figure out where I have wrong step?

推荐答案

你做 import pylib 就好像说 pylib 是一个顶级模块或包.但它不是——它是 pysoft 包的子模块.为了正确导入:

You do import pylib as if said pylib is a top-level module or package. But it's not — it's a submodule of the package pysoft. For the proper import do:

from pysoft import pylib

py_modules=['pylib'] 在您的 setup.py 中被忽略,因为 setuptools 找不到顶级 pylib.py.但是 packages=setuptools.find_packages() 有效并将 pysoft 包包含到发行版中.

py_modules=['pylib'] in your setup.py is ignored because setuptools cannot find top-level pylib.py. But packages=setuptools.find_packages() works and include pysoft package into distributions.

这篇关于ModuleNotFoundError: 没有名为 <modulename> 的模块pip安装后的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆