gpt4 book ai didi

python - 有没有办法添加命名空间前缀 setuptools 包分发?

转载 作者:行者123 更新时间:2023-12-04 06:26:10 24 4
gpt4 key购买 nike

我希望在我的 Python setuptools 分布式包中添加一个命名空间前缀。例如。我们有一个名为 common_utils 的包,并且希望它可以作为雨伞.common_utils 访问,而不必在包树中包含虚拟目录/模块“伞”。

这可能吗?

谢谢,

最佳答案

您可以使用 package_dir告诉 setuptools 子包的完整包名和位置的选项:

from setuptools import setup

setup(
name = 'umbrella',
packages = [
'umbrella.common_utils'
],
package_dir = {
'umbrella.common_utils': './common_utils'
}
)

结果:
% python setup.py build
..
creating build/lib/umbrella
creating build/lib/umbrella/common_utils
copying ./common_utils/__init__.py -> build/lib/umbrella/common_utils

更新

正如您所发现的, python setup.py develop目标有点像黑客。它将您的项目文件夹添加到 site-packages/easy-install.pth ,但不会使您的包适应 setup.py 中描述的结构。不幸的是,我还没有为此找到与 setuptools/distribute 兼容的解决方法。

听起来您实际上想要这样的东西,您可以将其包含在项目的根目录中并根据您的需要进行自定义:

创建名为 develop 的文件在您的项目根目录中:
#!/usr/bin/env python

import os
from distutils import sysconfig

root = os.path.abspath(os.path.dirname(__file__))
pkg = os.path.join(sysconfig.get_python_lib(), 'umbrella')
if not os.path.exists(pkg):
os.makedirs(pkg)
open(os.path.join(pkg, '__init__.py'), 'wb').write('\n')
for name in ('common_utils',):
dst = os.path.join(pkg, name)
if not os.path.exists(dst):
os.symlink(os.path.join(root, name), dst)


(virt)% chmod 755 ./develop
(virt)% ./develop
(virt)% python -c 'from umbrella import common_utils; print common_utils'
<module 'umbrella.common_utils' from
'/home/pat/virt/lib/python2.6/site-packages/umbrella/common_utils/__init__.pyc'>

关于python - 有没有办法添加命名空间前缀 setuptools 包分发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6019042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com