Unable to load submodules of a Python package: ModuleNotFoundError: No module named
Unable to load submodules of a Python package: ModuleNotFoundError: No module named
我是 Python 的新手。这看起来是一个很简单的问题,但我已经尽力解决了。
我正在尝试将我开发的 python 包发布到工件商店。但是,当我在目标机器上下载包时,它会遇到有关未找到内部模块的错误。包装和安装看起来都不错。输出消息显示它确实包含子模块。
我的目录结构如下。
samplepackage/
hello.py
__init__.py
dir1/
__init__.py
dir1pkg.py
以下是文件的内容。初始化文件是空的。
hello.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
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 做很多调整,但其中 none 有效。甚至安装包的输出看起来也不错。我确实看到 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
解决了问题。我们必须使用完全导入才能工作。
文件 hello.py 应该使用
from samplepackage.dir1.dir1pkg import dir1pkg
不要将 Visual studio 用于 python 项目。它不喜欢完全限定的包名称。切换到 pycharm 并将包导入修改为完全合格的导入,一切都开始工作了。
我是 Python 的新手。这看起来是一个很简单的问题,但我已经尽力解决了。
我正在尝试将我开发的 python 包发布到工件商店。但是,当我在目标机器上下载包时,它会遇到有关未找到内部模块的错误。包装和安装看起来都不错。输出消息显示它确实包含子模块。
我的目录结构如下。
samplepackage/
hello.py
__init__.py
dir1/
__init__.py
dir1pkg.py
以下是文件的内容。初始化文件是空的。
hello.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 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 做很多调整,但其中 none 有效。甚至安装包的输出看起来也不错。我确实看到 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
解决了问题。我们必须使用完全导入才能工作。
文件 hello.py 应该使用
from samplepackage.dir1.dir1pkg import dir1pkg
不要将 Visual studio 用于 python 项目。它不喜欢完全限定的包名称。切换到 pycharm 并将包导入修改为完全合格的导入,一切都开始工作了。