自定义 python 包在导入时出现 ModuleNotFoundError
Custom python packages gives ModuleNotFoundError while importing
以下是我的python包结构
pkg
|-- src
|-- data
|-- __init__.py
|-- loader1.py
|-- dataset
|-- __init__.py
|-- loader2.py
|-- utils
|-- __init__.py
|-- chk.py
|-- setup.py
|-- __init__.py
|-- LICENSE
|-- README.md
安装 pip 后,我想使用 from pkg.data.loader1 import func
,所以我使用了 from pkg.data.loader1 import func
(在 linux 终端中)。结果,我得到了 ModuleNotFoundError: No module named
的回应。
我该如何解决这个问题。
编辑:
setup.py
from setuptools import setup
with open("README.md", 'r') as fh:
long_description = fh.read()
setup(
name="pkg",
version="0.0.1",
description="will add",
long_description=long_description,
long_description_content_type="text/markdown",
author="my name",
packages=['pkg'],
install_requires=[]
)
你的setup()
方法中有package_dir={"": "pkg"}
、packages=find_packages("pkg")
和include_package_data=True
吗?如果没有,那么我建议您像这样添加它 -
setup(
....
package_dir={"": "pkg"},
packages=find_packages("pkg"),
include_package_data=True,
....
)
package_dir={"": "pkg"}
- 告诉 dsutil 包在 pkg
find_packages("pkg")
- 包含 pkg
下的所有包
include_package_data=True
- 在源代码管理中包含所有内容
希望有了这个你就能实现你想要的。
查看导入语句的结构,您可能需要的是一个包含所有子包的附加文件夹:
pkg
├── src # important: its only content is pkg
│ └── pkg # new folder here
│ ├── __init__.py # important: this file needs to exist
│ ├── data
│ │ ├── __init__.py
│ │ └── loader1.py
│ ├── dataset
│ │ ├── __init__.py
│ │ └── loader2.py
│ └── utils
│ ├── __init__.py
│ └── chk.py
├── setup.py
├── __init__.py
├── LICENSE
└── README.md
接下来,您的 setup.py
需要知道 src
是代码源,但不是包根目录 ,它是文件夹 [=14] =] 在它的正下方,加上它的所有子包:
setup(
....
package_dir={"": "src"},
packages=find_packages("pkg"),
....
)
然后您可以使用 python -m pip install -e .
将此包安装到当前活动的 python 解释器中,这样您就不需要在每次代码更改后重新安装它(您仍然需要更新 setup.py
后重新安装它)。
以下是我的python包结构
pkg
|-- src
|-- data
|-- __init__.py
|-- loader1.py
|-- dataset
|-- __init__.py
|-- loader2.py
|-- utils
|-- __init__.py
|-- chk.py
|-- setup.py
|-- __init__.py
|-- LICENSE
|-- README.md
安装 pip 后,我想使用 from pkg.data.loader1 import func
,所以我使用了 from pkg.data.loader1 import func
(在 linux 终端中)。结果,我得到了 ModuleNotFoundError: No module named
的回应。
我该如何解决这个问题。
编辑:
setup.py
from setuptools import setup
with open("README.md", 'r') as fh:
long_description = fh.read()
setup(
name="pkg",
version="0.0.1",
description="will add",
long_description=long_description,
long_description_content_type="text/markdown",
author="my name",
packages=['pkg'],
install_requires=[]
)
你的setup()
方法中有package_dir={"": "pkg"}
、packages=find_packages("pkg")
和include_package_data=True
吗?如果没有,那么我建议您像这样添加它 -
setup(
....
package_dir={"": "pkg"},
packages=find_packages("pkg"),
include_package_data=True,
....
)
package_dir={"": "pkg"}
- 告诉 dsutil 包在 pkg
下的所有包find_packages("pkg")
- 包含 pkginclude_package_data=True
- 在源代码管理中包含所有内容
希望有了这个你就能实现你想要的。
查看导入语句的结构,您可能需要的是一个包含所有子包的附加文件夹:
pkg
├── src # important: its only content is pkg
│ └── pkg # new folder here
│ ├── __init__.py # important: this file needs to exist
│ ├── data
│ │ ├── __init__.py
│ │ └── loader1.py
│ ├── dataset
│ │ ├── __init__.py
│ │ └── loader2.py
│ └── utils
│ ├── __init__.py
│ └── chk.py
├── setup.py
├── __init__.py
├── LICENSE
└── README.md
接下来,您的 setup.py
需要知道 src
是代码源,但不是包根目录 ,它是文件夹 [=14] =] 在它的正下方,加上它的所有子包:
setup(
....
package_dir={"": "src"},
packages=find_packages("pkg"),
....
)
然后您可以使用 python -m pip install -e .
将此包安装到当前活动的 python 解释器中,这样您就不需要在每次代码更改后重新安装它(您仍然需要更新 setup.py
后重新安装它)。