web-dev-qa-db-ja.com

ModuleNotFoundError:pipインストール後に<modulename>という名前のモジュールはありません

pythonパッケージディストリビューションで最初のステップを実行します。
残念ながら、pipからのインストールが成功した後、ModuleNotFoundErrorができました。

私のdirsレイアウトはかなりシンプルです:

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='[email protected]',
    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をセットアップして起動し、パッケージをインストールします。

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

次に、それを実行しようとしましたが、エラーが発生しました:

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'

私が間違ったステップをどこに持っているのか分かりますか?

3
fat

pylibがトップレベルのモジュールまたはパッケージであるかのように、_import pylib_を実行します。しかし、そうではありません— pysoftパッケージのサブモジュールです。適切にインポートするには、次のようにします。

_from pysoft import pylib
_

_py_modules=['pylib']_の_setup.py_は無視されます。これは、setuptoolsが最上位の_pylib.py_を見つけられないためです。しかし、packages=setuptools.find_packages()は機能し、pysoftパッケージをディストリビューションに含めます。

2
phd