python pip install .只允许在原始目录中导入软件包

baubqpgj  于 2023-08-02  发布在  Python
关注(0)|答案(1)|浏览(101)

我有一个在本地构建的包,我希望分发到另一个包中使用。在pip install .之后,我可以导入这个包并在Python中运行函数,但 * 只有在原始目录中。* 例如,安装包后立即:

>>> import mypkg
>>> mypkg.components.body_columns.dummify
<function dummify at 0x7fb380650e50>

字符串
但是,一旦我离开目录,它就不能再被导入了。例如,在cd ~/Desktop之后:

>>> import mypkg
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'mypkg'


此外,在安装位置(使用pip show mypkg给出),当前只有mypkg-1.3.0.dist-info目录,没有mypkg目录。我一直试图遵循this guidance,但还没有运气,这似乎是一个明显的问题。
我是新尝试分发包-任何想法是怎么回事?
如果有帮助,(简化的)分层结构是:

mypkg
├── mypkg
│   └── components
│       ├── __init__.py
│       └── body_columns.py
├── __init__.py
├── app.py
└── setup.py


基础__init__.py读取:from . import mypkg

6rvt4ljy

6rvt4ljy1#

我想明白了这是一个基本的问题,与我放置__init__.py文件的位置有关。
正确的文件结构不会将第一个__init__.py放在根目录中,而是放在它所包含的同义目录中:

mypkg
├── mypkg
│   ├── __init__.py
│   └── components
│       ├── __init__.py
│       └── body_columns.py
├── app.py
└── setup.py

字符串
我之所以能够导入到正确的目录中,是因为我和mypkg文件夹本身在同一个目录中,也就是说,我只是导入了一个人可能导入的任何脚本,该脚本位于当前目录中(尽管在这种情况下是包)。

相关问题