Pla*_*ong 6 python setuptools python-packaging
我需要将一个包写入存储库,但它是一个小型快速包,因此我认为不需要将文件放入子目录中。我只是想要:
import mypkg.module1
Run Code Online (Sandbox Code Playgroud)
具有目录结构
root_folder/
- setup.py
- __init__.py # the init for package "mypkg" (empty)
- module1.py
Run Code Online (Sandbox Code Playgroud)
我不想被限制增加文件夹层次结构,如下所示:
root_folder/
- setup.py
- __init__.py # the init for package "mypkg" (empty)
- module1.py
Run Code Online (Sandbox Code Playgroud)
root_folder/
- setup.py
- mypkg/ # WHY would I do that for 1 module??
- __init__.py
- module1.py
Run Code Online (Sandbox Code Playgroud)
但结果是,import mypkg失败了,并且import module1工作了,而不是期望的import mypkg.module1。
我发现了这个问题,但“只需将 setup.py 向上移动一个文件夹”的答案不适合我。
在此处找到设置参数文档后,我尝试定义一个命名空间包:
# Content of setup.py
from setuptools import setup
setup(name='MyPkg',
packages=['mypkg']
package_dir={'mypkg': '.'})
Run Code Online (Sandbox Code Playgroud)
如果没有测试,我想也许类似的东西可以工作:
#!/usr/bin/env python3
import setuptools
setuptools.setup(
name='MyPkg',
version='0.0.0.dev0',
packages=['mypkg'],
package_dir={
'mypkg': '.',
},
)
Run Code Online (Sandbox Code Playgroud)
最大的问题是,据我记得,您最终也会setup.py在包中mypkg,因此import mypkg.setup确实会导入setup模块。我没有验证过。
另一个大问题是,与大多数修改一样package_dir,“开发/可编辑”安装很可能根本不起作用。
但结果是,
import mypkg失败了,并且import module1工作了,而不是期望的import mypkg.module1
我可以想象如果项目没有实际安装,并且当前工作目录是项目的根目录,就会发生这种情况。
为了import mypkg成功,您必须确保项目已正确安装 ( python -m pip install .)。
如果import module1失败,您可能需要更改到不同的目录。
有关的:
| 归档时间: |
|
| 查看次数: |
3633 次 |
| 最近记录: |