微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Python setuptools:打包根目录每个包不需要子目录

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

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': '.',},)

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

另一个大问题是,与大多数 setup 修改一样,“开发/可编辑”安装很可能根本不起作用。


但结果是 package_dir 失败,import mypkg 有效,而不是所需的 import module1

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

要使 import mypkg.module1 成功,您必须确保正确安装项目 (import mypkg)。

如果 python -m pip install . 失败,您可能需要切换到其他目录。


相关

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。