为什么在`setup.py develop`之后新的子模块不可用?

时间:2016-03-01 22:04:56

标签: python setuptools

添加新脚本/子模块等后,为什么要再次运行setup.py develop

例如,我这样做:

pyvenv venv
. venv/bin/activate

现在,创建这些文件:

/
| setup.py
| testpkg
|  | __init__.py
|  | foo.py
|  |__
|__

(setup.py是一个简单的,foo.py包含一个函数) 然后,

python setup.py develop

现在,如果你启动python,你可以导入testpkg.foo

但是现在,添加bar.py:

/
| setup.py
| testpkg
|  | __init__.py
|  | foo.py
|  | bar.py      <---
|  |__
|__

您无法导入testpkg.bar

除非你再次跑步

python setup.py develop

为什么? (为什么它不起作用,为什么选择这种行为,如果它是预期的行为?)

注(并编辑)

在我的计算机上,运行python setup.py develop后,我注意到该链接指向build / lib / [...]。egg-info

并且在egg信息中,我看到源指向此build / lib。这里的文件不是链接,所以它应该如何工作?

1 个答案:

答案 0 :(得分:0)

检查是否设置了标志use_2to3。然后,正如医生所说:

  

如果您启用了use_2to3标志,那么当然是.egg-link   在Python 3下运行时,不会直接链接到您的源代码,   因为该源代码将用于Python 2而不能在其下工作   Python 3.相反,setup.py开发将构建Python 3代码   构建目录,并在那里链接。这意味着在做完代码之后   在进行这些更改之前,您必须运行setup.py build   通过Python 3安装获取。