标签: six-python

Python Metaclass:理解'with_metaclass()'

我想问一下这个with_metaclass()调用在一个类的定义中意味着什么.

例如:

class Foo(with_metaclass(Cls1, Cls2)):
Run Code Online (Sandbox Code Playgroud)
  • 是一个特殊的情况,一个类继承了元类?
  • 新类也是元类吗?

python metaclass six-python

48
推荐指数
2
解决办法
2万
查看次数

我如何调用super()使它在2和3中兼容?

我正在尝试使用编写2/3兼容代码six,但我不知道如何super()以交叉兼容的方式调用.还有更好的方法,例如:

class MyClass(MyBase):
    def __init__():
        if six.PY3:
            super().__init__()
        else:
            super(MyClass, self).__init__()
        ...
Run Code Online (Sandbox Code Playgroud)

python six-python

14
推荐指数
1
解决办法
2976
查看次数

unicode_literals和type()

我在type()调用时支持python2和python3时遇到问题.这证明了这个问题:

from __future__ import unicode_literals

name='FooClass'
type(name, (dict,), {})
Run Code Online (Sandbox Code Playgroud)

python3没问题,但在python2上:

Traceback (most recent call last):
  File "test.py", line 6, in <module>
    type(name, (dict,), {})
TypeError: type() argument 1 must be string, not unicode
Run Code Online (Sandbox Code Playgroud)

这与在Python 2.6中使用unicode_literals的Any gotchas有关吗?.在那个问题中,有人建议对一个字节串进行类型转换,所以天真地考虑使用six.b():

一个"假的"字节文字.数据应始终是正常的字符串文字.在Python 2中,b()返回一个8位字符串.在Python 3中,数据使用latin-1编码编码为字节.

所以它看起来像这样:

from __future__ import unicode_literals
import six

name='FooClass'
type(six.b(name), (dict,), {})
Run Code Online (Sandbox Code Playgroud)

但它在python2和python3上都失败了:

$ python2 test.py 
Traceback (most recent call last):
  File "test.py", line 6, in <module>
    type(six.b(name), (dict,), {})
TypeError: type() argument 1 …
Run Code Online (Sandbox Code Playgroud)

python python-2.x python-3.x six-python

12
推荐指数
1
解决办法
3561
查看次数

没有名为六的模块

安装transifex和./manage.py后出现以下错误:

Error: No modules named six.
Run Code Online (Sandbox Code Playgroud)

Python六安装在virtualenv中(来自https://pypi.python.org/pypi/six)Django Version是1.4

任何帮助都会很棒!thx和最好的问候迈克尔

django six-python

10
推荐指数
1
解决办法
1万
查看次数

Python错误:"ImportError:没有名为six的模块"

我在Windows 7操作系统上运行Python 2.7

这是我运行的:

>>> import matplotlib.pyplot as plt
Run Code Online (Sandbox Code Playgroud)

然后我明白了:

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    import matplotlib.pyplot as plt
  File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 29, in <module>
    from matplotlib.figure import Figure, figaspect
  File "C:\Python27\lib\site-packages\matplotlib\figure.py", line 36, in <module>
    from matplotlib.axes import Axes, SubplotBase, subplot_class_factory
  File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 20, in <module>
    import matplotlib.dates as _  # <-registers a date unit converter
  File "C:\Python27\lib\site-packages\matplotlib\dates.py", line 119, in <module>
    from dateutil.rrule import (rrule, MO, TU, WE, TH, FR, SA, …
Run Code Online (Sandbox Code Playgroud)

python matplotlib six-python

10
推荐指数
2
解决办法
9万
查看次数

找不到"六",但它已经安装好了

我已six安装(甚至重新安装).

$ pip show six
---
Name: six
Version: 1.7.3
Location: /usr/lib/python2.6/site-packages
Requires: 
Run Code Online (Sandbox Code Playgroud)

但是当我试图跑步时csvcut,它找不到它.

$ csvcut -n monster.csv
Traceback (most recent call last):
  File "/usr/bin/csvcut", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 2655, in <module>
    working_set.require(__requires__)
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 648, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 546, in resolve
    raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: six>=1.6.1
Run Code Online (Sandbox Code Playgroud)

这是相关的但是csvcut:

#!/usr/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'csvkit==0.8.0','console_scripts','csvcut'
__requires__ = 'csvkit==0.8.0'
import sys
from pkg_resources import load_entry_point

if …
Run Code Online (Sandbox Code Playgroud)

python centos six-python

10
推荐指数
1
解决办法
4465
查看次数

我如何使用六个?

我正在使用python-future一段时间,直到分析显示我的程序的5000万次实例化使我的程序的newint运行时间增加了10倍.我在Python 3中运行正常,但是试图使它与2和3兼容是非常需要的,因为我在我的组织中独自作为唯一的Py3推动器.

future有一些很好的文档说要扔

from __future__ import (absolute_import, division,
                        print_function, unicode_literals)
from future.builtins import *
Run Code Online (Sandbox Code Playgroud)

在我的所有源文件中作为样板文件然后在标准3中编写代码.但是,因为它似乎有点重,所以当解析大量文本文件时,这是一个拖累.

six似乎更轻量级,但使用它的常用方法是什么?文档有点扁平,易于掩盖...我目前有类似的东西:

from __future__ import (
        absolute_import, division, print_function, unicode_literals)
import six
from six.moves import (zip, filter, map, range, reduce, input)
Run Code Online (Sandbox Code Playgroud)

然而,有一些关于在属性访问上延迟加载模块的事情; 我可以说from six.moves import *,或者它实际上会加载所有的HTTP,Tkinter等爵士乐吗?用于开发Py2 + 3代码的"最佳实践"是six什么?

python python-3.x six-python

8
推荐指数
0
解决办法
3786
查看次数

在Python 2和Python3上重新编译Cython中的异常

我有一些目前看起来的Cython代码

exc = sys.exc_info()
raise exc[0], exc[1], exc[2]
Run Code Online (Sandbox Code Playgroud)

这在Python3上不起作用,因为不再允许"从元组中提升"形式.如果是这个普通的Python代码,我会使用six.reraise,但这在我这里不可用.什么是Cython友好的方式来做同样的事情,它适用于Python2和Python3?

exception python-2.x cython python-3.x six-python

5
推荐指数
1
解决办法
340
查看次数