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

Python package_dir的空字符串键在setup.py中起什么作用?,python,gradle,setuptools,Python,Gradle,Setuptools,我有一个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_pac

我有一个
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'}
的意义是什么?为什么我们有一个空字符串作为键?

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

在这里,如果代码驻留在
lib
目录下,那么定义
package_dir={'':'lib'}
packages=['foo']
将意味着您告诉系统在
lib
目录下查找
foo
模块,即
lib/foo/\uu init\uuuu.py
存在