【问题标题】:Unable to load submodules of a Python package: ModuleNotFoundError: No module named无法加载 Python 包的子模块:ModuleNotFoundError: No module named
【发布时间】:2021-02-27 10:15:50
【问题描述】:

我是 Python 新手。这看起来是一个非常简单的问题,但我尽力解决了。

我正在尝试将我开发的 python 包发布到神器商店。但是,当我在目标机器上下载包时,会遇到关于未找到内部模块的错误。包装和安装看起来都不错。输出消息显示它确实包含子模块。

我的目录结构如下。

samplepackage/
        hello.py
        __init__.py
        dir1/
            __init__.py
           dir1pkg.py

以下是文件的内容。初始化文件为空。

你好.py

import sys
from dir1.dir1pkg import dir1pkg

def main ():
    dirpkg = dir1pkg('This is msg')
    dirpkg.printmsg()

if __name__ == "__main__":
    main()

dir1pkg.py

class dir1pkg:
    def __init__(self,msg):
        self.msg = msg
        
    def printmsg(self):
        print(self.msg)

setup.py

import setuptools
from setuptools import setup, find_packages, find_namespace_packages

setup(
    name="samplepackage", 
    version="0.0.3",
    author="myname",
    author_email="myemail@email.com",
    description="This is a sample package",
    long_description="This is long description",
    long_description_content_type="text/markdown",
    packages=setuptools.find_packages(),
    include_package_data=True,
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    entry_points={
        "console_scripts":[
            "samplepackage=samplepackage.hello:main"
        ]
    }
    ,python_requires='>=3.7'
)

以下是我如何打包并发布到工件存储库。

python setup.py sdist bdist_wheel
twine upload --config-file ".pypirc" -r <artifact_feed> dist/*

以下是我在目标上的安装方式。

python -m pip install --upgrade samplepackage
python -m SamplePackage.hello.py

这给了我下面的错误

C:\Users\manan\Desktop>python -m samplepackage.hello.py 回溯(最近一次通话最后): _run_module_as_main 中的文件“C:\Users\manan\AppData\Local\Programs\Python\Python38\lib\runpy.py”,第 185 行 mod_name, mod_spec, 代码 = _get_module_details(mod_name, _Error) _get_module_details 中的文件“C:\Users\manan\AppData\Local\Programs\Python\Python38\lib\runpy.py”,第 111 行 __import__(pkg_name) 文件“C:\Users\manan\AppData\Local\Programs\Python\Python38\lib\site-packages\samplepackage\hello.py”,第 2 行,在 从 dir1.dir1pkg 导入 dir1pkg ModuleNotFoundError:没有名为“dir1”的模块

但是,从我正在开发包的地方运行它就很好。我可以在下面执行,它能够毫无问题地找到内部模块。

C:\Users\mdmehta\Desktop\PythonPackage\samplepackage>python hello.py 这是味精

我已经尝试在 setup.py 周围做了很多调整,但没有一个起作用。甚至安装包的输出看起来也不错。我确实看到 dir1 被包含在一个包中。

>>> 帮助('样品包') 包示例包的帮助: 姓名 样品包 包装内容 dir1(包) 你好 文件 c:\users\mdmehta\appdata\local\programs\python\python38\lib\site-packages\samplepackage\__init__.py

【问题讨论】:

    标签: python python-3.x python-module python-packaging


    【解决方案1】:

    找出问题所在。我们必须使用完全导入才能使其工作。

    文件 hello.py 应该使用 from samplepackage.dir1.dir1pkg import dir1pkg

    不要将 Visual Studio 用于 Python 项目。它不喜欢完全限定的包名。切换到 pycharm 并将包导入修改为完全合格的,一切都开始工作了。

    【讨论】:

      猜你喜欢
      • 2022-12-19
      • 2022-08-24
      • 2018-07-29
      • 2022-12-27
      • 2022-12-27
      • 1970-01-01
      • 2022-12-21
      • 2023-03-03
      • 1970-01-01
      相关资源
      最近更新 更多