有人可以解释为什么以下代码的行为方式如下:
import types
class Dummy():
def __init__(self, name):
self.name = name
def __del__(self):
print "delete",self.name
d1 = Dummy("d1")
del d1
d1 = None
print "after d1"
d2 = Dummy("d2")
def func(self):
print "func called"
d2.func = types.MethodType(func, d2)
d2.func()
del d2
d2 = None
print "after d2"
d3 = Dummy("d3")
def func(self):
print "func called"
d3.func = types.MethodType(func, d3)
d3.func()
d3.func = None
del d3
d3 = None
print "after d3"
Run Code Online (Sandbox Code Playgroud)
输出(注意d2的析构函数从不被调用)是这个(python 2.7)
delete d1
after d1
func called
after …Run Code Online (Sandbox Code Playgroud) 有没有一种简单的方法可以将空表单输入转换为java中的空字符串?我正在使用spring mvc和SimpleJdbcInsert将对象插入MySQL数据库.我想在数据库中将空白输入设置为NULL而不是''.我有很多字段,我希望有一种方法可以做到这一点,而无需手动检查每个值.
谢谢!
编辑 - 所以我是个白痴.我的几个错误使我相信下面的正确答案是不正确的.我写了一个propertyEditorSupport,如下所示:
class StringEditor extends PropertyEditorSupport {
public void setAsText(String text) {
String value = text.trim();
if ("" == value) {
setValue(null);
} else {
setValue(value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
两个问题 - 首先,没有getAsText,所以我的表单填充了"null"字符串!2,我的等式检查是C++,而不是java.当我尝试推荐的setter时,我只是重新加载了已经包含"null"字符串的帖子.一旦我清理了所有这些,一切都开始工作了.感谢您的帮助,对不起我的"操作员错误"!
布雷特
我正在尝试打包PyQt的版本(我没有为我需要的配置提供安装程序),但我找不到任何有效的打包配置.但问题并不是PyQt特有的.
问题:为了使模块工作,它需要python的PREFIX目录中的文件.我知道这可能是不好的形式,但在我的情况下需要有一个qt.conf文件,除了使文件可用之外,我没有什么可以做的.我需要能够运行安装后脚本来创建包含已安装的PyQt路径的文件.或者至少这似乎是最好的解决方案.
我看过的选项:
我可以使用python setup.py install并覆盖setuptools.command.install类.但是,这在手动运行setup.py时有效,并且需要解压缩bdist并在包文件夹中具有cmd提示符.它不适用于bdist_wininst,bdist_msi或bdist_wheel,它们更便于安装(包装点).可能,但不是一个很好的解决方案.
bdist_wheel似乎是一个不错的选择,但它不会在安装后运行任何东西,只会将文件放在特定的文件夹中,不包括PREFIX.
bdist_wininst支持安装后脚本(在创建包时通过--install-script开关),但不能与virtualenv一起使用.有一个stackoverflow答案建议运行easy_install或wheel convert,但这些选项只解包,他们不会运行安装脚本.否则,您必须更改注册表,这不是一个可接受的解决方案.
我错过了什么?有可行的选择吗?
一般问题: setuptools中是否有一种方法可以在前缀\ Lib\site-packages目录中安装dll?
我的特殊需求: PyQt5没有为Python2.7提供二进制安装程序,所以我是从源代码构建的,为了方便起见,我想打包结果.官方安装程序将sip.pyd放在前缀\ Lib\site-packages中,我希望保持一致.但我不确定如何.看来我可以使用py_modules或ext_modules来定义我希望模块去的地方,但我无法弄清楚如何使用.pyd文件.
我担心Windows,但我认为如果有一个setuptools解决方案,它将是平台独立的.如果重要,我正在尝试部署为轮(.whl)文件.
这就是我所拥有的:
from setuptools import setup, find_packages, Extension
setup(name='PyQt5',
version='5.2',
packages=find_packages(),
package_data = {"PyQt5":["*.pyd","uic/widget-plugins/*.py"]},
include_package_data=True,
scripts=["sip.exe"],
#ext_modules=[Extension("sip.pyd", ["sip.pyd"])], # <- this isn't working
headers=["sip.h"],
classifiers=[
'Operating System :: Microsoft :: Windows',
'License :: OSI Approved :: GNU General Public License (GPL)',
],
)
Run Code Online (Sandbox Code Playgroud)
我很清楚,这就是PyQt4安装程序包装的样子:

您可以看到,而不是放入$ _OUTDIR,sip.pyd转到Lib\site-packages.
我正在尝试嵌入python,并提供python库的DLL和zip,而不是使用任何已安装的python.也就是说,如果用户没有python,我希望我的代码能够使用提供的dll/zip工作.
这篇文章似乎描述了这个过程,除了它对我不起作用.
如果我运行以下命令,只要我有Python27.dll和一个名为Python27 的文件夹包含DLL和Lib文件夹,我的代码就会运行.
Py_SetProgramName(argv[0]); /* optional but recommended */
Py_SetPythonHome("Python27");
Py_Initialize();
Run Code Online (Sandbox Code Playgroud)
如果我删除Python27文件夹,代码失败 - 所以我拉入本地副本,而不是任何已安装的python.
但是,如果我压缩本地Python27文件夹,代码将停止运行,并显示"ImportError:No module named site".
PEP273让它看起来应该只是工作,但我尝试过的一切都失败了.
任何人都可以阐明如何从zip文件中运行嵌入式python?
鉴于有相关的问题没有得到解答,我认为如果人们成功地从zip文件中读取文件,即使他们不确定我可能需要修复的内容,也会有所帮助.
这至少可以帮助我理解我是否应该继续寻找答案!
更新:无论我尝试什么(即使建议使用LoadLibrary),我也可以从完全解压缩的目录运行我的程序.任何时候我用DLLs/*和Lib/*删除目录并放入Python27.zip,我只是得到
ImportError: No module named site
Run Code Online (Sandbox Code Playgroud) 我想我有与此处描述的相反的问题.我有一个进程将数据写入日志,我想要第二个进程来读取它,但我不希望第二个进程能够修改内容.这可能是一个大文件,我需要随机访问,所以我使用的是python的mmap模块.
如果我将mmap创建为读/写(对于第二个进程),我可以使用from_buffer将ctypes对象创建为mmap对象的"视图".从粗略看一下c代码,看起来这是一个演员,而不是副本,这就是我想要的.但是,如果我创建了mmap ACCESS_READ,则会中断,抛出from_buffer需要写权限的异常.
我想我想使用ctypes from_address()方法,它似乎不需要写访问权限.我可能遗漏了一些简单的东西,但我不确定如何在mmap中获取该位置的地址.我知道我可以使用ACCESS_COPY(因此写操作会显示在内存中,但不会持久保存到磁盘上),但我宁愿保持只读.
有什么建议?
我是virtualenv的新手(在Windows上).我正在尝试使用pip(1.5)安装本地wheel文件,但它失败了.
命令是:
pip install --no-index -f C:/Users/<User>/Download openpyxl
Run Code Online (Sandbox Code Playgroud)
在pip.log中,我可以看到它找到正确文件的位置,但之后不会尝试安装它:
Skipping link file:///C:/Users/<User>/Download/openpyxl-1.7.0-py2.py3-none-any.whl; unknown archive format: .whl
Run Code Online (Sandbox Code Playgroud)
我在全球以及虚拟环境中安装了wheel(版本0.22).知道如何让.whl成为公认的格式吗?
我刚刚第一次购买了代码签名证书.我正在使用脚本/命令行成功签署我的代码
signtool sign /f <pfx file> /p <password> <exe file>
Run Code Online (Sandbox Code Playgroud)
我注意到signtool还有一个选择"选择最佳证书"的选项,我相信使用导入Windows证书库的任何证书进行选择.
如果我双击我的证书,它将打开证书导入向导.
使用证书库的优缺点是什么?特别是对于个人开发者.
看起来像证书存储我不需要使用为每个调用提供密码.我想这意味着证书存储链接到我的用户并使用我的登录凭据来验证证书的使用?
谢谢,布雷特
使用数组大小的模板似乎很简单:
template <size_t N>
struct MyArray
{
char array[N];
};
Run Code Online (Sandbox Code Playgroud)
但是,我想要做的是根据其他内容设置数组大小:
enum MyEnum {Hi, Lo};
template <MyEnum T, size_t N>
struct MyArray
{
MyEnum type() { return T; }
char array[N];
};
Run Code Online (Sandbox Code Playgroud)
当MyEnum为Hi时如何将N设置为10,当MyEnum为Lo时如何设置为200?
我想做的就是说
MyArray<Lo> lo; // Result in MyArray<Lo, 200>
MyArray<Hi> hi; // Result in MyArray<Hi, 10>
Run Code Online (Sandbox Code Playgroud)
而不是说
MyArray<Lo, 200> lo;
MyArray<Hi, 10> hi;
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我的意思不是简单的git log,我知道这列出了所有内容。我正在寻找摘要。
我不确定这是否是最佳实践,但我在 git 中同时使用了合并和压缩风格的提交。如果更改很小而且很直接,我不明白为什么它需要合并提交,提交已经是原子的。另一方面,有时向代码添加逻辑函数包含多个原子步骤,在这种情况下我倾向于使用合并,以避免将多个步骤压缩在一起。
我想知道是否有一种很好的方法可以在日志中总结这一点。也就是说,我可以只列出合并提交(当且仅当它是合并提交),否则列出非合并提交吗?这与编辑合并提交有关,因此它当然描述了正在添加的功能。
看起来git log --merges很接近,但它没有列出被压扁的提交,所以是一个不完整的历史。
[根据关于 rebase 的评论进行编辑] 我认为我的问题适用于 git 和 github,但其中一条评论中的问题让我意识到它并不完全正确。Github 允许您合并拉取请求或压缩它(它还允许重新提交提交,但我认为这是题外话)。合并拉取请求会导致合并提交与拉取请求中的一组提交,而 aSquash commit基本上与将提交挑选到目标分支中相同(如果 PR 中有多个提交,则压缩)。
Argparse具有一个称为的功能,该功能fromfile-prefix-chars似乎正好满足我所寻找的一半。如何从当前命令行参数为该功能创建文件?
我有一个带有解析器的复杂脚本,该解析器使代码构建的一部分自动化。用例是第一次正确设置命令行,然后基本上使用相同的参数重新运行。
使用文件并从中加载似乎是实现我所需要的一种好方法。似乎缺少的是一种将初始命令行写出到文件中的简单方法,因此现有文件解析将正常进行。
python ×7
setuptools ×2
argparse ×1
c++ ×1
code-signing ×1
ctypes ×1
del ×1
form-submit ×1
git ×1
github ×1
java ×1
mmap ×1
pip ×1
python-2.7 ×1
python-wheel ×1
spring ×1
spring-mvc ×1
templates ×1
virtualenv ×1
windows ×1