我正在使用Py2exe在Windows 7 Pro(64位)上使用Python 2.6(32位)编译CherryPy(3.1)服务器.
此服务器将在没有GUI的情况下运行.
问题:
如果在没有GUI的情况下运行,我是否需要关注为此应用程序添加清单文件?
我需要在我的exe中包含w9xpopen.exe吗?
到目前为止,我的有限测试表明我不需要在我的可执行文件中包含清单文件或w9xpopen.exe以使其正常工作.
评论赞赏.
谢谢你,马尔科姆
基本上我有一个与标准库包相同名称的子包("logging"),我希望它能够绝对导入标准库,无论我如何运行它,但是当我进入时它会失败父包.
它看起来像是一个bug,或者是新的"绝对导入"支持的无证行为(Python 2.5中的新版本).试过2.5和2.6.
包装布局:
foo/
__init__.py
logging/
__init__.py
Run Code Online (Sandbox Code Playgroud)
在foo/__init__.py我们导入我们自己的日志子包:
from __future__ import absolute_import
from . import logging as rel_logging
print 'top, relative:', rel_logging
Run Code Online (Sandbox Code Playgroud)
在foo/logging/__init__.py我们要导入stdlib logging包:
from __future__ import absolute_import
print 'sub, name:', __name__
import logging as abs_logging
print 'sub, absolute:', abs_logging
Run Code Online (Sandbox Code Playgroud)
注意:包含的文件夹foo位于sys.path中.
从外部/上方导入时foo,输出符合预期:
c:\> python -c "import foo"
sub, name: foo.logging
sub, absolute: <module 'logging' from 'c:\python26\lib\logging\__init__.pyc'>
top, relative: <module 'foo.logging' from 'foo\logging\__init__.pyc'>
Run Code Online (Sandbox Code Playgroud)
因此,子包中的绝对导入会根据需要找到stdlib包.
但是当我们进入foo文件夹时,它的行为有所不同:
c:\foo>\python25\python -c "import …Run Code Online (Sandbox Code Playgroud) 我有一个基于Pylons的Web应用程序,它通过Sqlalchemy(v0.5)连接到Postgres数据库.为了安全起见,而不是遵循简单的Web应用程序的典型模式(如几乎所有教程中所见),我没有使用通用的Postgres用户(例如"webapp"),但要求用户输入他们自己的Postgres用户ID和密码,并使用它来建立连接.这意味着我们可以获得Postgres安全性的全部好处.
更复杂的是,有两个独立的数据库可以连接.虽然它们目前位于同一个Postgres集群中,但它们需要能够在以后转移到单独的主机.
我们正在使用sqlalchemy的声明包,但我看不出这与此有关.
sqlalchemy的大多数示例都显示了一些简单的方法,例如在应用程序启动时使用通用Web用户和密码设置元数据,通过Web应用程序使用.这通常使用Metadata.bind = create_engine()完成,有时甚至在数据库模型文件中的模块级别完成.
我的问题是,在用户登录之前,我们如何推迟建立连接,然后(当然)为每个后续请求重新使用这些连接,或者使用相同的凭证重新建立连接.
我们有这个工作 - 我们认为 - 但我不仅不确定它的安全性,我还认为它看起来非常重.
里面__call__的BaseController的方法,我们从Web上获得会话每个数据库的用户名和密码,调用SQLAlchemy的create_engine()一次,然后调用它调用Session.bind_mapper(常规)多次,一次为每个表可在每个被引用这些连接,即使任何给定的请求通常只引用一个或两个表.它看起来像这样:
# in lib/base.py on the BaseController class
def __call__(self, environ, start_response):
# note: web session contains {'username': XXX, 'password': YYY}
url1 = 'postgres://%(username)s:%(password)s@server1/finance' % session
url2 = 'postgres://%(username)s:%(password)s@server2/staff' % session
finance = create_engine(url1)
staff = create_engine(url2)
db_configure(staff, finance) # see below
... etc
# in another file
Session = scoped_session(sessionmaker())
def db_configure(staff, finance):
s = Session()
from db.finance import …Run Code Online (Sandbox Code Playgroud) 我们正在考虑使用复杂的GUI重新分解大型应用程序,该GUI以与后端分离的方式隔离,以使用新的(Python 2.6)多处理模块.GUI /后端接口使用Queues和在两个方向上交换的Message对象.
我刚刚总结的一件事(暂时,但随意确认)是在多处理界面上不会保留"对象标识".目前,当我们的GUI向后端发布消息时,它希望返回相同的消息,并将结果附加为属性.if received_msg is message_i_sent:在某些情况下,它使用对象标识()来标识返回的消息......这似乎不适用于多处理.
这个问题是要问你在实际使用中看到了什么样的"陷阱" ,或者可以想象人们会在天真地使用多处理模块遇到什么,尤其是在重构现有的单进程应用程序时.请说明您的答案是否基于实际经验.用于为问题提供可用解决方法的奖励点.
编辑:虽然我对这个问题的意图是收集一般问题的描述,但我认为我犯了两个错误:我从一开始就把它变成了社区维基(这可能会让很多人忽略它,因为它们不会得到声望点) ,我提出了一个过于具体的例子,虽然我很欣赏答案,但很多人都错过了一般回复的请求.我可能会在一个新问题中重新说出来并重新提出这个问题.就目前而言,我接受一个答案最好只是关于这个问题,只要它与我所包含的具体例子有关.感谢那些做出回答的人!
以下生成带有三个数据点的图,分别为(0,0),(0,0.5)和(1,1).只有位于绘图区域内的绘制点(小圆圈)的那部分是可见的,因此我看到角落中的四分之一圆圈和沿左脊柱的半圆圈.
有没有一个技巧可以让所有的点完全可见,所以它们不会被夹在轴框架内?
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
fig = Figure()
canvas = FigureCanvas(fig)
ax = fig.add_subplot(111)
ax.plot([0, 0, 1], [0, 0.5, 1], 'o')
fig.canvas.print_figure('test.png')
Run Code Online (Sandbox Code Playgroud)
编辑: Amro的建议 - 显而易见的方法 - 不是首选方法,因为这些是ROC图(通常用两个轴上的0到1的方框绘制).如果我可以欺骗matplotlib产生与http://www.google.com/search?q=roc+plot上的许多类似的结果,这些结果在两个轴上都有一个紧紧围绕0..1的框,但是在顶部绘制了点轴线尽可能多,这将是最佳的.
编辑2:我猜这可以使用" 脊柱放置 "(新的MPL 0.99)完成,绘图区域略微放大,如Amro所示,但随后脊柱重新定位略微沿两个0轴.我将试验这个并发布一个答案,如果它有效,尽管可以随意打败我.
我有一个代表x,y点的元组列表.我还列出了每个点的值列表.如何将它们组合成列表列表(即每个点[x,y,val]的一个条目)或元组列表?
谢谢
我有一个python程序,它使用ctypes来调用我传递指针的dll函数.它应该连续地向该指针写入数据,我希望我的程序循环并读取指针内容.粗略的模板看起来像:
from ctypes import *
import copy
lib = cdll.lib
pointer = c_char_p(" "*100) #however large a buffer I need
#thread this
lib.dostuff(pointer)
#end thread
while True:
data = pointer.value
print data
Run Code Online (Sandbox Code Playgroud)
在我的特定情况下,dostuff()是用C语言编写的,它打开一个文件并对其进行解码,将数据作为流运行到字符数组中.
问题是我不能在python中使用常规线程模块,因为线程持有GIL,因为读取dll被认为是文件I/O,或者因为dll本身就是文件I/0.因此,在dostuff()完成之前,循环不会运行.它阻塞的原因是什么(将dll调用总是阻塞?)以及如何解决这个问题?
编辑:----------已解决----------------------正如samplebias指出的那样,ctypes释放了GIL锁定.我发现程序中的阻塞问题是我正在运行队列:代码看起来有点像这样
import Queue
from threading import Thread
queue = Queue()
def runthread():
lib.dostuff(pointer)
while True:
queue.put(pointer.value)
thread = Thread(target=runthread)
thread.start()
while True:
data = queue.get()
dostuffwithdata(data)
Run Code Online (Sandbox Code Playgroud)
该程序是阻塞的,因为当队列为空时queue.get()会阻塞,直到有东西进入!当然,因为我没有单独调用dll调用,所以在我将指针结果推送到队列之前完成了.解决方案看起来有点像这样:
import Queue
from threading import Thread
queue = Queue()
def runthread():
q = Thread(target=lib.dostuff, args=(pointer,))
q.start()
while True:
queue.put(pointer.value) …Run Code Online (Sandbox Code Playgroud) 我有几个带有通用名称和个别变量(ID)的复选框.我如何在python中将它们作为列表读取?现在我正在使用
checkbox = request.POST ["common_name"]
它不能正常工作,复选框变量只存储最后一个复选框而不是任何列表或其他东西.
这是一个新手问题......
我得到了这个项目,我想使用google.code svn系统,但是,我不知道如何......事实上,我不习惯svn ...这就是我所做的:
svnadmin create octopy_repo
svn import /home/mrt/python/Qt/octopy file:///home/mrt/octopy_repo -m "Initial import"
Adding (bin) /home/mrt/python/Qt/octopy/octopus.png
Adding /home/mrt/python/Qt/octopy/oct.ui
Adding /home/mrt/python/Qt/octopy/zipi
Adding /home/mrt/python/Qt/octopy/octo.py
Adding /home/mrt/python/Qt/octopy/main.py
Adding /home/mrt/python/Qt/octopy/etc
Adding /home/mrt/python/Qt/octopy/etc/config.list
Committed revision 1.
mkdir octopy_working
svn checkout file:///home/mrt/octopy_repo /home/mrt/octopy_working
cd octopy_working
Run Code Online (Sandbox Code Playgroud)
这就是卡住的地方.首先,我编辑一些文件,然后:
svn status
M main.py
svn diff
Index: main.py
===================================================================
--- main.py (revision 1)
+++ main.py (working copy)
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-"""The user interface for our app"""
+"""The user interface for our app some …Run Code Online (Sandbox Code Playgroud) 我想定义几个插件。它们都继承自超类 Plugin。
每个插件都包含一个 wx.Panel,它有一个更具体的方法叫做“draw”。
如何将类定义为面板,然后在我的框架中调用该类?
我试过这样:
class Panel(wx.Panel):
def __init__(self, parent):
wx.Panel(self, parent)
Run Code Online (Sandbox Code Playgroud)
但它给了我这个错误:
in __init__
_windows_.Panel_swiginit(self,_windows_.new_Panel(*args, **kwargs))
TypeError: in method 'new_Panel', expected argument 1 of type 'wxWindow *'
Run Code Online (Sandbox Code Playgroud)
提前致谢!
对于此代码:
import os
a=os.path.join('dsa','wqqqq','ffff')
print a
print os.path.exists('dsa\wqqqq\ffff') #what situation this will be print True?
Run Code Online (Sandbox Code Playgroud)
os.path.exists('what')何时打印True?