以下是我的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=[]
)
答案 0 :(得分:1)
你的package_dir={"": "pkg"}
方法中有packages=find_packages("pkg")
、include_package_data=True
和setup()
吗?如果没有,那么我建议您像这样添加它 -
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
- 在源代码管理中包含所有内容
希望通过这个,你将能够实现你想要的。
答案 1 :(得分:1)
查看导入语句的结构,您可能需要一个包含所有子包的附加文件夹:
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
是代码源,但不是包根目录,即它正下方的文件夹 pkg
, 加上它的所有子包:
setup(
....
package_dir={"": "src"},
packages=find_packages("pkg"),
....
)
然后,您可以使用 python -m pip install -e .
将此软件包安装到当前活动的 python 解释器中,这样您就无需在每次代码更改后重新安装它(更新 {{ 后您仍然需要重新安装它) 1}} 不过)。