Python setuptools:打包根目录(不需要每个包的子目录)
Python setuptools: packaging the root directory (no subdirectory per package wanted)
我需要将一个包写入一个存储库,但它是一个小的快速包,所以我看不出需要将文件放入一个子目录。我只想:
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': '.',
},
)
最大的问题是,据我所知,您最终也会在包 mypkg
中得到 setup.py
,因此 import mypkg.setup
确实会导入 setup
模块。我还没有验证。
另一个大问题是,与大多数 package_dir
修改一样,“develop/editable”安装很可能根本无法运行。
but as a result, import mypkg
fails, and import module1
works, instead of the desired import mypkg.module1
如果项目没有实际安装,并且当前工作目录是项目的根目录,我可以想象会发生这种情况。
为了 import mypkg
成功,您必须确保正确安装项目 (python -m pip install .
)。
如果 import module1
失败,您可能需要切换到其他目录。
相关:
- Create editable package setup.py in the same root folder as __init__.py
- Setting package_dir to ..?
我需要将一个包写入一个存储库,但它是一个小的快速包,所以我看不出需要将文件放入一个子目录。我只想:
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': '.',
},
)
最大的问题是,据我所知,您最终也会在包 mypkg
中得到 setup.py
,因此 import mypkg.setup
确实会导入 setup
模块。我还没有验证。
另一个大问题是,与大多数 package_dir
修改一样,“develop/editable”安装很可能根本无法运行。
but as a result,
import mypkg
fails, andimport module1
works, instead of the desiredimport mypkg.module1
如果项目没有实际安装,并且当前工作目录是项目的根目录,我可以想象会发生这种情况。
为了 import mypkg
成功,您必须确保正确安装项目 (python -m pip install .
)。
如果 import module1
失败,您可能需要切换到其他目录。
相关:
- Create editable package setup.py in the same root folder as __init__.py
- Setting package_dir to ..?