为了能够在Windows上运行我的跨平台应用程序的测试脚本,我安装了MSYS2并使用pacman来安装我的测试脚本所依赖的任何软件包.
由于MSYS2提供了一个git(msys/git)端口,我认为也不需要为Windows安装Git.但是MSYS2存储库中提供的git版本与Git for Windows提供的版本有什么区别?
到目前为止我注意到了这些差异
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不会失败,因此在路径处理方面至少存在一些差异.
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 …
我正在编写一个排版应用程序,我正在使用PSG作为生成postscript文件的后端.我现在想知道这个选择是否有意义.ReportLab Toolkit似乎提供了PSG提供的所有功能,以及更多功能.然而,ReportLab输出PDF.
优势PDF提供:
有没有理由使用Postscript而不是直接输出到PDF?虽然Postscript是一种完整的编程语言而不是PDF,但作为文档的基本输出格式,似乎没有任何优势.我假设PDF可以很容易地转换为PostScript进行打印?
一些有用的链接:
我有一个对象的树形结构.我需要遍历叶子中的所有项目("值").为此,我目前正在使用如下所示的生成器方法:
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) 我有子类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我的应用程序中的条件(当我知道参数Integer是b'0')并有条件地打印int(Integer(b'0')) …
我试图在运行时找出实例化对象的位置,因为这样可以为我的库用户提供非常有用的错误消息.
假设我们有以下代码:
import mylib
obj = mylib.MyClass()
Run Code Online (Sandbox Code Playgroud)
obj然后传递给另一个类的实例mylib,并继续进行一次精彩的旅程.沿着这条线的某个地方,obj会导致不好的事情发生,我想将用户指向obj实例化的地方.
我希望我可以使用inspect模块找出哪个文件以及obj实例化的行号.不幸的是,inspect.getsourcefile并且inspect.getsourcelines不支持实例.是否存在技术原因导致不支持此操作?
有没有其他方法可以获得我正在寻找的数据?
看看下面的代码:
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) 我想使用相关子查询更新表中的多个列。更新单列很简单:
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)
唉,这是不可能的。这可以用另一种方式解决吗?
到目前为止,这是我一直在考虑的:
为了完整起见,这是我正在处理的实际 SQL 查询:
UPDATE route SET …Run Code Online (Sandbox Code Playgroud) 我很难产生使用14种标准PDF字体的PDF。让我们以Times-Roman为例。
我创建了一个Font类型的词典Type1,具有BaseFont设置为Times-Roman。如果我省略了字典的Encoding条目Font,或者添加了Encoding不带字典的字典BaseEncoding,则PDF查看器应用程序应使用字体的内置编码。对于Times-Roman,这是AdobeStandardEncoding。
这对于ASCII字符来说很好用。但是,并非所有PDF查看器都能正确显示诸如“ fi”连字(AdobeStandardEncoding代码174)之类的更奇特的东西:
我尝试过的所有其他PDF查看器都正确显示了“ fi”连字。它们还会正确显示€符号,该符号还会使用字典中的Differences数组进行映射Encoding(因为AdobeStandardEncoding中不包含该符号):
打开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字体程序中不是)。
它还说WinAnsiEncoding和MacRomanEncoding 可以与TrueType字体一起使用。那么我们应该避免对标准的14种字体使用内置的或StandardEncoding吗?其效果似乎是不确定的。似乎Adobe Reader不会费心在所使用的TrueType字体中执行从字形名称到字形的正确映射。
Differences使用Win或Mac编码时提供数组会产生正确的结果吗?由于这些代码点映射到Type1 / Postscript字形名称,因此没有直接链接到TrueType字形。
编辑,我觉得字体描述符标志对于这些标准字体可能很重要。到目前为止,我将所有字体的标志设置为4,这对于True / OpenType字体似乎工作正常。
我有一个类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 ×5
pdf ×2
postscript ×2
built-in ×1
coroutine ×1
fonts ×1
generator ×1
git ×1
inspect ×1
int ×1
msys2 ×1
python-3.x ×1
sql-update ×1
sqlite ×1
subclass ×1
super ×1
superclass ×1
tee ×1
windows ×1