简短问题
当连接到PostgreSQL数据库时,从Django过滤器调用返回的列表的默认顺序是什么?
背景
通过我自己也承认,我曾提出在应用一个糟糕的假设层,在其返回一个列表中的顺序将是常数,即不使用"ORDER_BY".我查询的项目列表不是按字母顺序或任何其他故意的顺序.它被认为保持与添加到数据库中的顺序相同.
这个假设适用于数百个查询,但是当订单在不知不觉中发生变化时,我的应用程序报告了失败.据我所知,在这段时间内没有触及这些记录,因为我是维护数据库的唯一人.令人困惑的是,当在Mac OS X上运行Django应用程序时,它仍然按预期工作,但在Win XP上,它改变了顺序.(请注意,上面提到的数百个查询都在Win XP上).
任何对此的见解都会有所帮助,因为我在Django或PostgreSQL文档中找不到解释操作系统差异的任何内容.
示例呼叫
required_tests = Card_Test.objects.using(get_database()).filter(name__icontains=key)
Run Code Online (Sandbox Code Playgroud)
编辑
今天与我的一些同事交谈后,我得到了与BjörnLindqvist相同的答案.
回想起来,我明白为什么这样做经常出错.使用ORM Django,sqlalchemy或其他任何一个好处是您可以编写命令而无需了解或理解(详细)它所连接的数据库.不可否认,我碰巧是其中一个用户.然而,另一方面,在不知道数据库的情况下,这样的调试错误非常麻烦并且可能是灾难性的.
简短问题
在构建pyinstaller可执行文件时,有没有办法控制/保证架构(32位对64位)?
背景
我从py2exe迁移到pyinstaller,因为缺乏64位支持以及一些我很难看过去的小东西.所以在那个说明中,我宁愿不回到它.我使用Python 2.7 64位开发了两个应用程序,并且在32位机器上运行时遇到了性能问题.
第一个是简单的wxPython GUI(版本2.9),并连接到USB驱动程序的Windows DLL文件.这个以32位运行似乎非常"安全",因为没有只有64位的模块.但是,在32位Windows XP上运行时,此应用程序在与USB设备通信时会出现严重的性能问题.
第二个应用程序要大得多,我还没有尝试构建和运行,因为担心架构问题.此应用程序中使用了多个64位模块(一个psycopg2).如果无法以32位可执行文件的形式运行,我想远离尝试构建它.
目前的想法
我觉得这可能是可能的(如果模块有32位支持),可以通过在32位模式下强制运行build.py来运行.这有意义吗?
更新
我在我正在建设的第一个项目上取得了一些突破.事实证明,性能问题完全取决于两台机器的速度.我的开发机器有足够的能力足够快地轮询USB设备,而速度慢得多的测试平台(Windows XP)没有.
我通过修改我轮询USB端口的方式修复了这个问题.既然已经修复了,我可以在两个系统上运行exe.尝试将可执行文件构建为单个文件时出现了一个新问题.当运行pyinstaller的Build.py时,它会提取应用程序运行所需的所有DLL.这看起来效果很好,但是当我尝试运行我在Windows 7 64bit上构建的单个exe时,它不能在Windows XP上运行,因为USB加密狗的DLL未被识别为有效的DLL.
为了让单个exe在两个系统上运行,我首先尝试从.spec文件中删除DLL(它似乎是一个python脚本).这很方便,因为我能够使用普通的python列表修饰符修改构建命令之前的包含列表.我希望如果在exe的临时目录中找不到DLL,它会在系统路径上找到它.虽然这种方法可能有效,但我无法在不丢失大量错误的情况下运行它.
我的第二次尝试是在Windows XP机器上构建应用程序(保留嵌入的DLL),希望Win XP DLL可以在Windows 7中运行.成功!这种配置效果很好; 但我坚信这不是最好的解决方案,因为它完全取决于在较新的操作系统上运行的旧DLL.
背景
我有大量的字段将从外部进程实时更新.我想定期更新Flask托管页面,以向连接的用户显示任何更改.理想情况下,整个页面不会刷新,这是对类似系统的抱怨,而只是更新页面上的许多字段.
当前方向
我目前的想法是使用可能使用JavaScript来处理这个问题,但我不确定在使用Flask时是否可行.
有没有办法使用Flask或第三方模块来实现这一目标?
附加信息
将使用各种插槽和串行端口更新数据.每个接口都将在其自己的线程中运行并更新共享内存.请注意,Flask/Web界面对共享内存具有只读写入,可由其他线程更新.
总客户端池不应超过20人.这是测试系统的Web界面,通常在任何给定时间只有1-5人连接到它.
运行python应用程序的目标机器将有三个可用的网络接口.通常,所有三个网络都将大不相同,但是三个网络中的两个可能在类似的网络上.
在下面的示例中,我无法控制ETH 2上的目标地址(因为它是预先配置的系统),因此我强制选择要以编程方式使用的适配器.
我很确定这将取决于操作系统如何处理路由连接.我希望有一种独立于平台的方法来解决使用python的问题,因为这个应用程序有可能需要在Windows 7以及Linux机器上运行.
示例代码
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.0.2', 8000)) # Which device will this connect to??
Run Code Online (Sandbox Code Playgroud)
正常情况
可能的麻烦案例
附加信息
适配器ETH0,1和2都连接到不同的物理网络
简短描述
这个问题并不是要问是否需要使用虚拟环境,而是在使用Ian Bicking的virtualenv时 ,在Windows中管理环境的最佳方式是什么(如果有的话).如果您有多个想法,请多次回答,以便最好的答案可以投票.谢谢!
背景
当在python中开发时,我通常尽可能地尝试使用Mac osx/bash.但是,总有一些项目我不得不使用Windows来获得硬件/驱动程序支持.对于这些项目,我倾向于依靠"双击"方法来运行带有已注册python.exe的模块.使用"双击"是一种同时运行多个线程/测试的简单方法,无需打开新的命令提示符,向下钻取到所需的目录,然后键入"python.exe module.py" .
最终目标
我希望有一种方法来管理和利用虚拟环境,而无需处于命令提示符下(仅限Windows)
愿望清单
1.能够从pip(命令行)或二进制文件(无论出于何种原因无法使用pip安装的模块)安装模块.
2.使用virtualenv.exe从GUI管理环境.(创建,删除,列出,激活等......)
研究
到目前为止,我已经能够使用不同的脚本/方法完成我的愿望清单中的点点滴滴,但还没有找到一种方法来组合它们.我计划将其中的大部分组合成一个GUI我自己,但认为找出是否有一个很好的理由这是不明智的.
使用更改在Windows中注册的python版本的脚本,可以非常轻松地将二进制文件安装到虚拟环境中.我已经使用该脚本几个月了,只有很好的结果.见SO问题
管理环境似乎是更困难的部分.
如果使用bash,则有Doug Hellmann编写的virutalenvwrapper.我在Mac OSX上工作时会使用它,并且会推荐它.
有此发挥到电源外壳中的端口位置 ,但仍然需要安装第三方命令提示符界面.
我看到的一个更独特的窗口,我看到端口virtualenvwrapper蝙蝠文件.我没有测试过这个,但它仍然需要使用命令提示符.在这里找到
我迄今发现的最有希望的助手功能是由Justin Driscoll编写的.虽然这个确切的例子需要命令提示符,但将它转换为python GUI可以调用的东西是微不足道的.在我认为应该与群众一起检查实现目标的最佳途径之前,这是我走下去的道路.
简短问题
使用virtualenv/virtualenvwrapper是否可以为python链接到特定虚拟环境的调用添加前缀?
背景
我想有一个使用brew安装的 Python 2.7的多个虚拟环境,但有些运行在64位模式和其他32位模式.
下面我有我的OS X开发的典型设置.我想要添加到python调用的特定前缀是arch -i386强制python以32位模式运行.同样,最重要的部分是它只能在调用后添加workon env32(如示例所示).我知道我可以在.bash_profile中设置一个别名,但每次创建/删除虚拟环境时都必须修改它.
编辑
为了详细说明我使用简单别名的问题,可能有超过1 32位的虚拟环境.这就是说,调用workon将理想地添加前缀来python调用,因此终端的工作流程将是相同的.调用后的含义workon env_x_32我可以使用,python并且arch -i386在使用终端时对我来说是透明的.
Python安装:
> brew install python --framework --universal
Run Code Online (Sandbox Code Playgroud)
创建虚拟环境(安装pip,virtualenv和virtualenvwrapper之后):
> mkvirtualenv env_1_64 --no-site-packages
> mkvirtualenv env_1_32 --no-site-packages
> mkvirtualenv env_2_64 --no-site-packages
> mkvirtualenv env_2_32 --no-site-packages
Run Code Online (Sandbox Code Playgroud)
64位用法:
> workon env_1_64
> python myscript.py
> workon env_2_64
> python my_other_project_script.py
Run Code Online (Sandbox Code Playgroud)
32位用法:(当前/非理想)
> workon env_1_32
> arch -i386 …Run Code Online (Sandbox Code Playgroud) 问题
我想知道是否存在计划作为模块导入的Python目录命名的标准约定.意味着该目录包含空白__init__.py
背景
到目前为止,我几乎没有考虑过它,只根据在文件系统级别有意义的内容进行命名.让我遇到麻烦的是,在文件系统级别有意义的东西对其他开发人员的独立模块也有意义.考虑以下目录:
+ drivers
+ prologix
- __init__.py
- driver_a.py
- driver_b.py
+ visa
- __init__.py
- driver_a.py
- driver_b.py
__init__.py
ringout.py <-- simple file to ring-out the drivers
Run Code Online (Sandbox Code Playgroud)
虽然在打开prologix的驱动程序时工作正常,但在尝试导入我的签证驱动程序以及pyVisa的"签证"模块时遇到了问题.诊断问题非常容易,但将签证驱动程序的文件夹重命名为"visa_dir"的修复程序使代码更难以阅读(IMO).
import drivers.visa
Run Code Online (Sandbox Code Playgroud)
VS
import drivers.visa_dir
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来处理这个?
简短问题
有没有令人信服的理由将Django 1.2.5更新为1.3?如果发行说明中的注释更改不会直接影响我的应用程序.
编辑:
为了更好地澄清我的问题(感谢S.Lott!):Django 1.3的发行说明中是否有任何未提及的问题,如果从版本1.2.5升级,我应该注意这些问题?
背景
我已经完成了1.2.5的所有开发,没有任何麻烦.我将在接下来的一到两周内部署我的应用程序,它的生命周期将持续使用18到24个月.
辅助(更一般的问题)
在发布之前,获取最新且最好的(稳定)版本的依赖项是一种好习惯吗?
python ×10
windows ×3
django ×2
virtualenv ×2
32bit-64bit ×1
built-in ×1
compilation ×1
directory ×1
django-orm ×1
flask ×1
html ×1
javascript ×1
linux ×1
macos ×1
pip ×1
postgresql ×1
pyinstaller ×1
pypi ×1
sockets ×1
sql-order-by ×1
usb ×1