在已安装的包中导入时遇到问题
Having trouble with imports in an installed package
我按照 the packaging guide:
做了一个非常简单的 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'
我很困惑,因为当我开发包时 运行ning python A.py
从来没有导致错误,但是现在当我导入 A
时它不起作用更多
(在 venv 中,又名:客户端使用包)我能够通过将 A.py
的内容更改为 :
来解决这个问题
from tester import B
但这不是解决方案,因为当我返回开发包时,我在 运行ning 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'
最后,为了完整的上下文,我将 post 包的结构。我正在 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
如果我没记错的话,在 tester/a.py
中你应该有其中之一:
from . import B
from tester import B
import tester.B
我按照 the packaging guide:
做了一个非常简单的 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'
我很困惑,因为当我开发包时 运行ning python A.py
从来没有导致错误,但是现在当我导入 A
时它不起作用更多
(在 venv 中,又名:客户端使用包)我能够通过将 A.py
的内容更改为 :
from tester import B
但这不是解决方案,因为当我返回开发包时,我在 运行ning 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'
最后,为了完整的上下文,我将 post 包的结构。我正在 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
如果我没记错的话,在 tester/a.py
中你应该有其中之一:
from . import B
from tester import B
import tester.B