为什么setuptools和pip对符号链接的程序包会有不同的反应?

时间:2020-06-01 12:09:51

标签: pip setuptools

这是代表python项目的测试目录结构。 testpackagedir/通过setup.pybin(包含主体脚本)和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。我花了一些时间才弄清楚这一点,所以我觉得这是工作的发布。

这是预期的行为吗?我在做错什么吗?

0 个答案:

没有答案