小编Bre*_*els的帖子

msys/git和git-for-windows/mingw-w64-x86_64-git有什么区别?

为了能够在Windows上运行我的跨平台应用程序的测试脚本,我安装了MSYS2并使用pacman来安装我的测试脚本所依赖的任何软件包.

由于MSYS2提供了一个git(msys/git)端口,我认为也不需要为Windows安装Git.但是MSYS2存储库中提供的git版本与Git for Windows提供的版本有什么区别?

到目前为止我注意到了这些差异

  1. msys/git pip freeze在virtualenv上运行时将失败,其中在开发模式下安装了git clone的Python包:

    FileNotFoundError: [WinError 3] The system cannot find the path specified: '/c/users/user/documents/project/.git\\..'
    
    Run Code Online (Sandbox Code Playgroud)

    git-for-windows/mingw-w64-x86_64-git不会失败,因此在路径处理方面至少存在一些差异.

  2. Git for Windows的gitk和git gui开箱即用.没有必要像这里描述的那样设置GIT_GUI_LIB_DIR环境变量.

看来Git for Windows存储库中的git提供了最佳体验.

PS您可以通过添加以下为在MSYS2的Windows的混帐混帐安装/etc/pacman.conf,以上[mingw32], [mingw64][msys]条目.但是安装Git for Windows SDK可能是一个更好的主意,它基本上是MSYS2的特殊版本,包括Git for Windows.否则,此处描述了以下过程(以及更多).

[git-for-windows]
Server = https://dl.bintray.com/$repo/pacman/$arch

[git-for-windows-mingw32]
Server = https://dl.bintray.com/git-for-windows/pacman/i686
Run Code Online (Sandbox Code Playgroud)

在此之后(也许是一个pacman -Sy),您可以安装Git for Windows的git:

pacman -S mingw-w64-x86_64-git
Run Code Online (Sandbox Code Playgroud)

我想没有理由不在MSYS2中安装Git for Windows的git?

编辑 Git for Windows(联合国)安装程序遗留下来C:\ProgramData\Git\config …

windows git msys2

32
推荐指数
1
解决办法
5414
查看次数

PostScript与PDF作为输出格式

我正在编写一个排版应用程序,我正在使用PSG作为生成postscript文件的后端.我现在想知道这个选择是否有意义.ReportLab Toolkit似乎提供了PSG提供的所有功能,以及更多功能.然而,ReportLab输出PDF.

优势PDF提供:

  • transparancy
  • 更好地支持字符编码(例如Unicode)
  • 能够嵌入TrueType甚至OpenType字体
  • 超链接和书签

有没有理由使用Postscript而不是直接输出到PDF?虽然Postscript是一种完整的编程语言而不是PDF,但作为文档的基本输出格式,似乎没有任何优势.我假设PDF可以很容易地转换为PostScript进行打印?

一些有用的链接:

pdf postscript

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

关于协程的itertools.tee?

我有一个对象的树形结构.我需要遍历叶子中的所有项目("值").为此,我目前正在使用如下所示的生成器方法:

class Node(object):
    def __init__(self):
        self.items = [Leaf(1), Leaf(2), Leaf(3)]

    def values(self):
        for item in self.items:
            for value in item.values():
                yield value

class Leaf(object):
    def __init__(self, value):
        self.value = value

    def values(self):
        for i in range(2):
            yield self.value

n = Node()
for value in n.values():
    print(value)
Run Code Online (Sandbox Code Playgroud)

这打印:

1
1
2
2
3
3
Run Code Online (Sandbox Code Playgroud)

现在,a返回的值Leaf将取决于外部参数.我正在考虑使用协程能够将此参数传递给叶节点:

import itertools

class Node2(object):
    def __init__(self):
        self.items = [Leaf2(1), Leaf2(2), Leaf2(3)]

    def values(self):
        parameter = yield
        for item in self.items:
            item_values = item.values()
            next(item_values) …
Run Code Online (Sandbox Code Playgroud)

python generator coroutine tee python-itertools

16
推荐指数
1
解决办法
626
查看次数

int子类的非确定性行为

我有子类int添加一个额外的属性:

class Integer(int):
    def __new__(cls, value, base=10, indirect=False):
        try:
            obj = int.__new__(cls, value, base)
        except TypeError:
            obj = int.__new__(cls, value)
        return obj

    def __init__(self, value, base=10, indirect=False):
        self.indirect = indirect
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中使用此类,int(Integer(b'0')) 有时返回值48(= ord('0')!)或192,而不是正确的值0. str(Integer(b'0'))总是返回'0'.这似乎只发生在值0.首先解码b'0'为字符串,或传递int(b'0')Integer没有区别.问题在于将a转换Integer(0)intwith int().

此外,这是以随机方式发生的.后续运行将在应用程序(解析器)的不同点产生48或192.Python 3.2.2和3.2.3都表现相同(32位,Windows XP).

我似乎无法在一个简单的测试程序中重现这一点.以下产生无输出:

for i in range(100000):
    integer = int(Integer(b'0'))
    if integer > 0:
        print(integer)
Run Code Online (Sandbox Code Playgroud)

检查int(Integer()) > 0我的应用程序中的条件(当我知道参数Integerb'0')并有条件地打印int(Integer(b'0')) …

python int subclass built-in python-3.x

10
推荐指数
0
解决办法
338
查看次数

如何找出对象的实例化位置?

我试图在运行时找出实例化对象的位置,因为这样可以为我的库用户提供非常有用的错误消息.

假设我们有以下代码:

import mylib

obj = mylib.MyClass()
Run Code Online (Sandbox Code Playgroud)

obj然后传递给另一个类的实例mylib,并继续进行一次精彩的旅程.沿着这条线的某个地方,obj会导致不好的事情发生,我想将用户指向obj实例化的地方.

我希望我可以使用inspect模块找出哪个文件以及obj实例化的行号.不幸的是,inspect.getsourcefile并且inspect.getsourcelines不支持实例.是否存在技术原因导致不支持此操作?

有没有其他方法可以获得我正在寻找的数据?

python inspect

9
推荐指数
1
解决办法
1042
查看次数

如何在Python中访问超类的类属性?

看看下面的代码:

class A(object):
    defaults = {'a': 1}

    def __getattr__(self, name):
        print('A.__getattr__')
        return self.get_default(name)

    @classmethod
    def get_default(cls, name):
        # some debug output
        print('A.get_default({}) - {}'.format(name, cls))
        try:
            print(super(cls, cls).defaults) # as expected
        except AttributeError: #except for the base object class, of course
            pass

        # the actual function body
        try:
            return cls.defaults[name]
        except KeyError:
            return super(cls, cls).get_default(name) # infinite recursion
            #return cls.__mro__[1].get_default(name) # this works, though

class B(A):
    defaults = {'b': 2}

class C(B):
    defaults = {'c': 3}


c = C()
print('c.a …
Run Code Online (Sandbox Code Playgroud)

python super superclass

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

如何在 SQLite 中使用相关子查询更新多个列?

我想使用相关子查询更新表中的多个列。更新单列很简单:

UPDATE route
SET temperature = (SELECT amb_temp.temperature
                   FROM amb_temp.temperature
                   WHERE amb_temp.location = route.location)
Run Code Online (Sandbox Code Playgroud)

但是,我想更新路由表的几列。由于子查询实际上要复杂得多(使用SpatiaLite函数与嵌套子查询 JOIN ),我想避免像这样重复它:

UPDATE route
SET
  temperature = (SELECT amb_temp.temperature
                 FROM amb_temp.temperature
                 WHERE amb_temp.location = route.location),
  error = (SELECT amb_temp.error
           FROM amb_temp.temperature
           WHERE amb_temp.location = route.location),
Run Code Online (Sandbox Code Playgroud)

理想情况下,SQLite 会让我做这样的事情:

UPDATE route
SET (temperature, error) = (SELECT amb_temp.temperature, amb_temp.error
                            FROM amb_temp.temperature
                            WHERE amb_temp.location = route.location)
Run Code Online (Sandbox Code Playgroud)

唉,这是不可能的。这可以用另一种方式解决吗?

到目前为止,这是我一直在考虑的:

  • 按照本答案中的建议使用 INSERT OR REPLACE 。似乎不可能在子查询中引用路由表。
  • 在 UPDATE 查询前面加上WITH 子句,但我认为这在这种情况下没有用。

为了完整起见,这是我正在处理的实际 SQL 查询:

UPDATE route SET …
Run Code Online (Sandbox Code Playgroud)

sqlite sql-update

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

14种标准PDF字体和字符编码

我很难产生使用14种标准PDF字体的PDF。让我们以Times-Roman为例。

我创建了一个Font类型的词典Type1,具有BaseFont设置为Times-Roman。如果我省略了字典的Encoding条目Font,或者添加了Encoding不带字典的字典BaseEncoding,则PDF查看器应用程序应使用字体的内置编码。对于Times-Roman,这是AdobeStandardEncoding

这对于ASCII字符来说很好用。但是,并非所有PDF查看器都能正确显示诸如“ fi”连字(AdobeStandardEncoding代码174)之类的更奇特的东西:

  • Adobe Reader显示Times-Roman和?的®(Unicode索引174)。时代斜体
  • SumatraPDF(葡萄酒)显示®两种字体
  • Mozilla的PDF.js展示了'AE'两种字体

我尝试过的所有其他PDF查看器都正确显示了“ fi”连字。它们还会正确显示€符号,该符号还会使用字典中的Differences数组进行映射Encoding(因为AdobeStandardEncoding中不包含该符号):

  • 苹果预览/跳过
  • GhostScript
  • PDF-XChange Viewer(葡萄酒)
  • 福昕阅读器(葡萄酒)
  • Chromium的内部PDF查看器
  • 埃文斯(自制)

打开Adobe Reader的“ 文档属性”窗口显示:

Times-Roman
    Type: Type1
    Encoding: Custom
    Actual Font: Times-Roman
    Actual Font Type: TrueType
Run Code Online (Sandbox Code Playgroud)

我怀疑使用TrueType字体而不是Type1字体的事实可能与问题有关。PDF规范:

StandardEncoding Adobe标准拉丁文本编码。这是在类型1拉丁文字字体程序中定义的内置编码(但 通常在TrueType字体程序中不是)。

它还说WinAnsiEncodingMacRomanEncoding 可以与TrueType字体一起使用。那么我们应该避免对标准的14种字体使用内置的或StandardEncoding吗?其效果似乎是不确定的。似乎Adobe Reader不会费心在所使用的TrueType字体中执行从字形名称到字形的正确映射。

Differences使用Win或Mac编码时提供数组会产生正确的结果吗?由于这些代码点映射到Type1 / Postscript字形名称,因此没有直接链接到TrueType字形。

编辑,我觉得字体描述符标志对于这些标准字体可能很重要。到目前为止,我将所有字体的标志设置为4,这对于True / OpenType字体似乎工作正常。

pdf fonts postscript

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

__init __()的"私有"参数?

我有一个类a在实例化上采用一个参数,该参数存储在_a属性中.对于许多方法(运算符),我还需要_b在结果上设置一个属性.目前这是以直截了当的方式实施的:

class SomeClass(object):
    def __init__(self, a=0):
        self._a = a
        self._b = 0

    def __add__(self, other):
        result = self.__class__()
        result._b = self._a + other._a
        return result
Run Code Online (Sandbox Code Playgroud)

现在,我有许多成员_b,例如_c_d,因此__add__每个属性都需要一个额外的行.能够在对象实例化上传递这些将导致更清晰的代码:

class SomeClass(object):
    def __init__(self, a=0, _b=0):
        self._a = a
        self._b = 0

    def __add__(self, other):
        return self.__class__(_b=self._a + other._a)
Run Code Online (Sandbox Code Playgroud)

但是,我不希望用户传递除aas 之外的所有参数的值_b,_c并且_d是实现细节.我可以简单地在docstring中声明不要传递多个参数.使用下划线在"私有"属性之前是为了反映这一点.

或者,通过提供第二个私有构造函数,我可以尝试让用户更难行为:

class SomeClass(object):
    def __init__(self, a=0):
        self._a = a
        self._init()

    def …
Run Code Online (Sandbox Code Playgroud)

python

4
推荐指数
1
解决办法
1395
查看次数