【问题标题】:Python setuptools: packaging the root directory (no subdirectory per package wanted)Python setuptools:打包根目录(每个包不需要子目录)
【发布时间】:2021-07-07 20:56:55
【问题描述】:

我需要将包写入存储库,但它是一个小型快速包,因此我认为不需要将文件放入子目录。我只是想要:

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'])

【问题讨论】:

  • 也许这会让你走上正轨:stackoverflow.com/a/58429219——命名空间很可能不是你想要的。 -- 你可能有兴趣查看py_modules

标签: python setuptools python-packaging


【解决方案1】:

如果不进行测试,我认为类似的方法可能会起作用:

#!/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”安装很可能根本不起作用。


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

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

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

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


相关

【讨论】:

  • 哦,测试前忘记去别的目录了。。。我安装的命令是python3 setup.py develop --user -N。我会检查你的建议。关于导入设置的好点,谢谢。
  • 你真的应该使用python -m pip install --editable .(而不是setup.py develop)。 - 而且这也不适用于可编辑/开发安装,你可以忘记它。我在其中一个链接的相关问题中对此进行了扩展。
猜你喜欢
  • 2021-01-20
  • 2018-06-02
  • 2011-04-04
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
  • 1970-01-01
相关资源
最近更新 更多