Python setuptools:打包根目录(不需要每个包的子目录)

Python setuptools: packaging the root directory (no subdirectory per package wanted)

我需要将一个包写入一个存储库,但它是一个小的快速包,所以我看不出需要将文件放入一个子目录。我只想:

import mypkg.module1

具有目录结构

root_folder/
    - setup.py
    - __init__.py  # the init for package "mypkg" (empty)
    - module1.py

而且我不想限制增加文件夹层次结构,如下所示:

root_folder/
    - setup.py
    - mypkg/  # WHY would I do that for 1 module??
        - __init__.py
        - module1.py
# Content of setup.py
from setuptools import setup

setup(name='MyPkg',
      packages=['mypkg']
      package_dir={'mypkg': '.'})

但结果是,import mypkg 失败了,import module1 起作用了,而不是所需的 import mypkg.module1

我找到了 this question,但是“只需将 setup.py 上移一个文件夹”的答案不适合我。

找到设置参数文档后 here,我尝试定义一个命名空间包:

# Content of setup.py with a namespace package
from setuptools import setup

setup(name='MyPkg',
      packages=['thisdir']
      package_dir={'thisdir': '.'},
      namespace_packages=['mypkg'])

未经测试,我认为类似的东西可能会起作用:

#!/usr/bin/env python3
import setuptools
setuptools.setup(
    name='MyPkg',
    version='0.0.0.dev0',
    packages=['mypkg'],
    package_dir={
        'mypkg': '.',
    },
)

最大的问题是,据我所知,您最终也会在包 mypkg 中得到 setup.py,因此 import mypkg.setup 确实会导入 setup模块。我还没有验证。

另一个大问题是,与大多数 package_dir 修改一样,“develop/editable”安装很可能根本无法运行。


but as a result, import mypkg fails, and import module1 works, instead of the desired import mypkg.module1

如果项目没有实际安装,并且当前工作目录是项目的根目录,我可以想象会发生这种情况。

为了 import mypkg 成功,您必须确保正确安装项目 (python -m pip install .)。

如果 import module1 失败,您可能需要切换到其他目录。


相关:

  • Create editable package setup.py in the same root folder as __init__.py
  • Setting package_dir to ..?