package_dir 的空字符串键在 setup.py 中有什么作用?

What does an empty string key for package_dir do in setup.py?

我有一个 setup.py 文件,如下所示:

import setuptools

from distgradle import GradleDistribution

setuptools.setup(
  distclass=GradleDistribution,
  package_dir={'': 'src'},
  packages=setuptools.find_packages('src'),
  include_package_data=True,
  namespace_packages=['foo'],
  entry_points={
    'console_scripts': [
      'first = foo.something.first:main',
      'second = foo.somethingelse.second:main',
    ],
  },
)

package_dir={'': 'src'}有什么意义?为什么我们有一个空字符串作为键?

当您在根级别有多个目录并且模块位于一个目录下时,您可以将该目录定义为根包,然后将在其中查找提供给 packages 命名参数的所有包目录。 Python的官方文档描述的很好:

https://docs.python.org/2/distutils/setupscript.html#listing-whole-packages

在这里,如果代码位于 lib 目录下,那么定义 package_dir = {'': 'lib'}packages = ['foo'] 将意味着您告诉该系统在 [=] 下查找 foo 模块11=] 即 lib/foo/__init__.py 存在。