python中的setup.py:如何安装子包?

python中的setup.py:如何安装子包?,python,setup.py,Python,Setup.py,考虑以下包结构: src/ /__init__.py bar.py /foo /__init__.py foobar.py 我想编写一个setup.py,以便在执行以下操作时: pip install -e . 在根目录中,以下所有操作都将起作用: import src import src.foo import foo 我可以使用find_namespace_包轻松实现前两个,但我尝试了find_namespace_packages()、fi

考虑以下包结构:

src/
   /__init__.py
   bar.py
   /foo
       /__init__.py
       foobar.py
我想编写一个setup.py,以便在执行以下操作时:

pip install -e .
在根目录中,以下所有操作都将起作用:

import src
import src.foo
import foo

我可以使用find_namespace_包轻松实现前两个,但我尝试了find_namespace_packages()、find_packages()、package_dir的各种组合,也可以导入子包foo而不指定前缀(即src.foo),但没有成功。我该怎么做呢?

也许我错了,但我敢肯定,你不能用你构建/打包回购的方式。Python将查看<代码> SRC,并且每个此外,还存在潜在的命名空间冲突。如果您使用的不是
foo
,而是
csv
?这将打破python默认的
csv
库。通过指定
src.foo
可以明确定义
foo
的位置

我能想到的唯一方法是将您的代码放在两个独立的存储库中,并在PyPI上提供
foo
(即
pip-install-foo
)。将其添加到
requirements.txt
后,您可以执行以下操作:

import foo

src/\uuuu init\uuuu.py
中。这将允许您拥有:
src.foo
foo

我敢肯定,您不能用构建/打包代码的方式。Python将查看<代码> SRC,并且每个此外,还存在潜在的命名空间冲突。如果您使用的不是
foo
,而是
csv
?这将打破python默认的
csv
库。通过指定<代码> SRC.FoO 明确定义了<代码> FoO < /C> >。您真正应该考虑的是将<代码> FoO < /C>作为单独的PyPI包,然后将其添加到您的要求中。然后,
src.foo
就可以使用了。@astrochun我明白你的意思了。我只是在处理一个代码库,其中有一堆带有模块的子包,它们有时使用src.foo导入,有时只使用foo。我认为这是因为代码是通过在pythonpath上进行黑客攻击开发的,因此所有子模块都可以访问。啊,我建议对其进行重构以保持一致性,因为您希望将其打包在一起。这样,使用
src.foo
或类似于
from.的东西是一致的。。导入foo
。当这些代码增长时,现在这样做将为您节省后顾之忧。我在下面提供了一个关于如何分离事物的答案。