gpt4 book ai didi

python - 仅在 3.x 上出现的 Python 包的 ImportError

转载 作者:太空宇宙 更新时间:2023-11-04 03:33:04 26 4
gpt4 key购买 nike

我在 PyPA 上托管了一个名为 Airship 的 Python 包,它在 __init__.py 中有以下代码:

import os
from airship import sync

class suppress_stdout_stderr(object): # http://stackoverflow.com/questions/11130156
def __init__(self):
self.null_fds = [os.open(os.devnull,os.O_RDWR) for x in range(2)]
self.save_fds = (os.dup(1), os.dup(2))

def __enter__(self):
os.dup2(self.null_fds[0], 1)
os.dup2(self.null_fds[1], 2)

def __exit__(self, *_):
os.dup2(self.save_fds[0], 1)
os.dup2(self.save_fds[1], 2)
os.close(self.null_fds[0])
os.close(self.null_fds[1])

def main():
with suppress_stdout_stderr():
sync()

sync()__main__.py 中定义,我在 setup.py 中有这些行来将入口 pip 定义为脚本:

entry_points={
'console_scripts': [
'airship=airship:main'
]
}

当我在 Python 2.7.9 安装上从 pip 安装后运行 airship 时,它按预期运行(即没有输出)。

当我在 Python 3.4.3 安装中尝试从 pip 安装相同的包时,我收到此错误:

Traceback (most recent call last):
File "C:\Python34\lib\runpy.py", line 170, in _run_module_as_main
"__main__", mod_spec)
File "C:\Python34\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Python34\Scripts\airship.exe\__main__.py", line 5, in <module>
File "C:\Python34\lib\site-packages\airship\__init__.py", line 2, in <module>
from airship import sync
ImportError: cannot import name 'sync'

是什么原因造成的,我该如何解决?

(注意:我只尝试在 Python 3.x 版本的 pip 上运行 airshipWindows,这是我遇到此问题的地方。我已经设法在 OS X 和 Debian 上的 Python 2.x 安装上成功运行 airship

最佳答案

在 python 3 中,您需要使用显式相对导入,因此要在您的项目中导入顶级 sync 模块:

from . import sync

如果 syncairship 的子模块,那么这样做:

from .airship import sync

相对导入样式被添加到 python 2.4、2.5 和 2.6 中 PEP 328 , 但直到 python 3 才删除了隐式相对导入。

关于python - 仅在 3.x 上出现的 Python 包的 ImportError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30293298/

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