无法加载Python包的子模块:ModuleNotFoundError:没有名为的模块

2024-10-02 00:32:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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'
)

下面是我如何打包并发布到artifacts repo

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
Traceback (most recent call last):
  File "C:\Users\manan\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 185, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "C:\Users\manan\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 111, in _get_module_details
    __import__(pkg_name)
  File "C:\Users\manan\AppData\Local\Programs\Python\Python38\lib\site-packages\samplepackage\hello.py", line 2, in 
    from dir1.dir1pkg import dir1pkg
ModuleNotFoundError: No module named 'dir1'

然而,从我开发包的地方开始,这运行得很好。我可以执行下面的命令,它可以找到内部模块,没有任何问题

C:\Users\mdmehta\Desktop\PythonPackage\samplepackage>python hello.py
This is msg

我试过在setup.py周围做很多twick,但都不起作用。即使安装的软件包的输出看起来也不错。我确实看到dir1作为一个包包含在内

>>> help('samplepackage')
Help on package samplepackage:

NAME
    samplepackage

PACKAGE CONTENTS
    dir1 (package)
    hello

FILE
    c:\users\mdmehta\appdata\local\programs\python\python38\lib\site-packages\samplepackage\__init__.py

Tags: namepyimporthelloinitismainpackages
1条回答
网友
1楼 · 发布于 2024-10-02 00:32:54

解决了问题。我们必须使用完全导入才能使其工作

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

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

相关问题 更多 >

    热门问题