这是代表python项目的测试目录结构。 testpackagedir/
通过setup.py
,bin
(包含主体脚本)和src
(包含主体包)来保存项目的主要定义。 src/the_package
处有一个子包,它是在其他地方定义的符号链接。
(此设置模仿了许多其他项目使用的库“ another_package”,但安装后不应将其视为顶级软件包。)
.
├── another_package
│ ├── __init__.py
│ └── somethingelse.py
└── testpackagedir
├── bin
│ ├── dosomething
│ └── dosomethingelse
├── setup.py
└── src
└── the_package
├── another_package -> ../../../another_package/
├── __init__.py
└── something.py
安装pip3 install /path/to/testpackagedir
时不会出现错误,但安装时不包括another_package
:
(pythonpackaging) -- user@machine:~/pythonpackaging
=> dosomething
You are doing something
(pythonpackaging) -- user@machine:~/pythonpackaging
=> dosomethingelse
Traceback (most recent call last):
File "/home/user/pythonpackaging/bin/dosomethingelse", line 3, in <module>
from the_package.another_package.somethingelse import do_somethingelse
ModuleNotFoundError: No module named 'the_package.another_package'
但是,如果我在运行python3 setup.py build
之前运行pip3 install /path/to/testpackagedir
,则安装中确实包含the_package.another_package
。我花了一些时间才弄清楚这一点,所以我觉得这是工作的发布。
这是预期的行为吗?我在做错什么吗?