无法将 itertools.so 添加到 os 中的路径

can't add itertools.so to the path in os

我正在使用 mac os x 10.10.1 和 python2.7。就在最近,我安装了 blend 环境,并尝试通过一个名为 batch2.py 的 python 程序以编程方式创建一些动画 together blender。

如果我执行python batch2.py中的程序,它没有问题,要制作动画,我必须通过命令执行它 - /Applications/Blender/blender.app/Contents/MacOS/blender -b scene.blend -P batch2.py,

但是显示错误:

print ( list(itertools.imap(None, numbers, decimals))  )
AttributeError: 'module' object has no attribute 'imap' 

batch2.py如下所示,一个简单的python程序。

import sys    
import itertools

print (sys.path)
print (".....................")

letters = ['a', 'b', 'c', 'd', 'e', 'f']
booleans = [1, 0, 1, 0, 0, 1]
numbers = [23, 20, 44, 32, 7, 12]
decimals = [0.1, 0.7, 0.4, 0.4, 0.5]

print ( list(itertools.imap(None, numbers, decimals))  )

因为 blender 应用程序有自己的 python 基于 python 3.4 的环境,所以我只是将系统 os 环境添加到 sys.path 中,如下所示。

sys.path.append("/Users/abc/anaconda/lib/python2.7")
sys.path.append("/Users/abc/anaconda/lib/python2.7/site-packages")
sys.path.append("/Users/abc/anaconda/lib/python2.7/lib-dynload/")
sys.path.append("/Users/abc/anaconda/lib/python2.7/plat-darwin")
sys.path.append("/Users/abc/anaconda/lib/python2.7/plat-mac")
sys.path.append("/Users/abc/anaconda/lib/python2.7/lib-tk")
sys.path.append("/Users/abc/anaconda/lib/python2.7/lib-old")
sys.path.append("/Users/abc/anaconda/lib/python2.7/site-packages/PIL")
sys.path.append("/Users/abc/anaconda/lib/python2.7/site-packages/Sphinx-1.2.3-py2.7.egg")
sys.path.append("/Users/abc/anaconda/lib/python2.7/site-packages/runipy-0.1.1-py2.7.egg")
sys.path.append("/Users/abc/anaconda/lib/python2.7/site-packages/setuptools-5.8-py2.7.egg")

但还是不行。

我发现 itertools 在 '/Users/abc/anaconda/lib/python2.7/lib-dynload/itertools.so' 的路径中,但我该如何使用它?

将 Python 2.7 文件夹添加到您的路径将不允许 Python 3.X 使用 2.7 模块。

在这里你真的不需要 imap - 你可以使用内置的 zip 函数来组合序列。替换

print ( list(itertools.imap(None, numbers, decimals))  )

print(list(zip(numbers, decimals)))

如果您真的必须 imap 无论如何,您可以将 itertools 文档中给出的实现复制粘贴到您自己的脚本中。 (为了版本兼容性做了一些小修改)

def imap(function, *iterables):
    # imap(pow, (2,3,10), (5,2,3)) --> 32 9 1000
    iterables = list(map(iter, iterables))
    while True:
        args = [next(it) for it in iterables]
        if function is None:
            yield tuple(args)
        else:
            yield function(*args)