python - 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
.
我找到了这个问题,但是“只需将 setup.py 向上移动一个文件夹”的答案不适合我。
在这里找到设置参数文档后,我尝试定义一个命名空间包:
# 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
确实会导入setup
模块。我没有验证。
另一个大问题是,与大多数package_dir
修改一样,“开发/可编辑”安装很可能根本不起作用。
但结果,
import mypkg
失败并import module1
有效,而不是期望的import mypkg.module1
如果项目没有实际安装,并且当前工作目录是项目的根目录,我可以想象会发生这种情况。
要import mypkg
成功,您必须确保项目已正确安装 ( python -m pip install .
)。
如果import module1
失败,您可能需要更改到不同的目录。
相关:
推荐阅读
- r - 以几种方式在 R 和 ggplot2 中显示相对频率或密度直方图
- angular - 如何在Angular ngIf中检查SafeHtml类型是否为null
- python - json.decoder.JSONDecodeError:期望值:加载相同的 json 文件时的第 1 行第 2 列(字符 1)
- java - 扫描仪未读取下一行并退出循环
- python - 替换 NaN 值的函数
- html - HTML - 图像上的文本(带链接)
- python - 如何有效地将数据名列的行传递给字典
- android - 制作仅覆盖自定义视图一部分的波纹
- python - Python错误:类中未定义函数
- google-kubernetes-engine - 使用私有 IP 在 GKE 中的 KONG 入口