gpt4 book ai didi

python - setuptools 依赖和导入问题

转载 作者:行者123 更新时间:2023-11-28 23:02:30 25 4
gpt4 key购买 nike

我对 python 中的设置工具还不太熟悉。我最近向我的项目添加了一个依赖项并遇到了依赖项的问题。问题是:

try:
from setuptools import setup
except ImportError:
from distutils.core import setup

from mypackage import VERSION

setup(
name='mypackage',
...
version=VERSION,
packages=['mypackage'],
install_requires=['six'])

问题是 mypackage 导入了 six,因此由于 from mypackage import,setup.py 在全新安装时失败(six 尚未安装) VERSION 行。我已经通过入侵虚拟模块导入(见下文)解决了这个问题,但我真的希望有更好的方法不需要我在两个位置或单独的文件中维护版本号。

try:
import six
except ImportError:
# HACK so we can import the VERSION without needing six first
import sys
class HackObj(object):
def __call__(*args):
return HackObj()
def __getattr__(*args):
return HackObj()
sys.modules['six'] = HackObj()
sys.modules['six.moves'] = HackObj()

最佳答案

作为一般规则,不要从 setup.py 导入您的包,因为(如您所知)如果您还没有安装所有依赖项,则无法安装您的包。

而是按照建议in this answer ,创建一个单独的模块version.py(或类似的)没有任何外部依赖定义VERSION。在您的 setup.py 中执行 execfile('mypackage/version.py') 瞧,您可以访问 VERSION 而无需任何讨厌或不安全的黑客攻击.

正如 medmunds 指出的,execfile 在 Python 3 中不可用,因此请改用:

with open('mypackage/version.py') as f:
exec(f.read())

关于python - setuptools 依赖和导入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9845069/

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