我需要将一个包写入存储库,但它是一个小型快速包,因此我认为不需要将文件放入子目录中。我只是想要:
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
.
I found 这个问题 https://stackoverflow.com/q/812242/4614641,但“只需将 setup.py 向上移动一个文件夹”的答案不适合我。
找到设置参数文档后here https://setuptools.readthedocs.io/en/latest/references/keywords.html,我尝试定义一个命名空间包:
# 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
我可以想象如果项目没有实际安装,并且当前工作目录是项目的根目录,就会发生这种情况。
For import mypkg
要成功,您必须确保项目已正确安装(python -m pip install .
).
And for import module1
如果失败,您可能需要更改到其他目录。
Related:
- 在与 __init__.py 相同的根文件夹中创建可编辑包 setup.py https://stackoverflow.com/questions/58375315/create-editable-package-setup-py-in-the-same-root-folder-as-init-py
- 将 package_dir 设置为 ..? https://stackoverflow.com/questions/17756742/setting-package-dir-to
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)