创建最小 python 包时出现 ModuleNotFoundError

问题描述 投票:0回答:1

我按照打包指南制作了一个非常简单的python包:

tester
├── A.py
├── B.py
└── __init__.py

A.py
的内容很简单:

import B

__init__.py
B.py
是空文件。

我将包上传到testpypi并安装在虚拟环境中。我首先通过制作一个简单的

test.py
文件来检查它是否有效:

from tester import A

然后我尝试运行该文件:

(scratch-venv) [ccn@sy337b4 scratch-box]$ python test.py
Traceback (most recent call last):
  File "/home/ccn/scratch-box/test.py", line 1, in <module>
    from tester import A
  File "/home/ccn/scratch-box/scratch-venv/lib/python3.9/site-packages/tester/A.py", line 1, in <module>
    import B
ModuleNotFoundError: No module named 'B'

我很困惑,因为当我开发运行的包时

python A.py
从未导致错误,但现在当我导入
A
时它不再工作了。

(在 venv 中,又名:客户端使用包)我可以通过将

A.py
的内容更改为 :

来解决此问题
from tester import B

但这不是一个解决方案,因为当我回去开发包时,我在运行时遇到此错误

python A.py

Traceback (most recent call last):
  File "/home/ccn/tester_package/src/tester/A.py", line 1, in <module>
    from tester import B
ModuleNotFoundError: No module named 'tester'

最后,为了获得完整的上下文,我将发布包的结构。我正在 src/tester 中开发

.
├── build
│   ├── bdist.linux-x86_64
│   └── lib
│       └── tester
│           ├── A.py
│           ├── B.py
│           └── __init__.py
├── dist
│   ├── example_pkg_2_cuppajoeman-0.0.1-py3-none-any.whl
│   └── example-pkg-2-cuppajoeman-0.0.1.tar.gz
├── LICENSE
├── pyproject.toml
├── README.md
├── setup.cfg
└── src
    ├── example_pkg_2_cuppajoeman.egg-info
    │   ├── dependency_links.txt
    │   ├── PKG-INFO
    │   ├── SOURCES.txt
    │   └── top_level.txt
    └── tester
        ├── A.py
        ├── B.py
        ├── __init__.py
        └── __pycache__
            └── B.cpython-39.pyc

9 directories, 17 files
python import package relative-path pypi
1个回答
1
投票

如果我没记错的话,在

tester/a.py
中你应该有其中之一:

from . import B
from tester import B
import tester.B
© www.soinside.com 2019 - 2024. All rights reserved.