小编use*_*440的帖子

cx_Oracle - DLL加载失败

我在使用Python导入cx_Oracle时遇到问题.我知道这里讨论了很多关于cx_Oracle的问题,但是在阅读完所有相关主题之后,我似乎无法找到问题的解决方案.

我有两台机器,一台是我的电脑,另一台是远程工作站,它有类似的配置(Windows 7,64位).我需要在远程工作站上安装cx_Oracle但它不起作用,而它在我的计算机上工作正常(我可以成功导入模块并连接到我的数据库).在远程工作站上,我有以下错误:

Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
  import cx_Oracle
ImportError: DLL load failed: The specified module could not be found.
Run Code Online (Sandbox Code Playgroud)

我已经仔细检查了我的环境变量,并且我重新安装了cx_Oracle几次,但我无法让它工作......我对这个问题进行了一些研究,我有点卡在这里,我不明白为什么它在我的计算机上工作正常,但在这个远程工作站上没有(唯一的区别是这个远程工作站是一个VM).

有没有人知道可能是什么问题?

在cx_oracle.pyd上运行Dependancy Walker(在我的计算机上工作正常并且在cx_oracle不起作用的远程工作站上),唯一的区别是我的远程工作站上找不到的dll MSVCR100和MSVCR90.

我有以下环境变量设置:

  • C:\Oracle as ORACLE_BASE

  • C:\Oracle\instantclient_12_1 作为ORACLE_HOME

  • C:\Oracle\instantclient_12_1 添加到"路径"变量

两台机器都是64位Windows 7

我正在运行Python 2.7.5

我解压缩了instantclient-basic-nt-12.1.0.1.0 in C:\Oracle\instantclient_12_1

我安装了 cx_Oracle-5.1.2-11g.win32-py2.7s

在远程工作站上,sys.path给我:

'C:\ Python27\Lib\idlelib','C:\ Windows\system32\python27.zip','C:\ Python27\DLLs','C:\ Python27\lib','C:\ Python27\lib\plat-win','C:\ Python27\lib\lib-tk','C:\ Python27','C:\ Python27\lib\site-packages'


编辑1

在上一篇文章中,所有文件(Python 2.7,cx_Oracle包,Oracle Instant Client)都是针对32位系统的.我为64位系统下载了相同版本的文件,现在我的远程工作站上的一切正常.

编辑2

基本上,修复包括重新安装64位系统而不是32位系统的所有内容(Python,Oracle Instant Client和cx_Oracle).

总结一下,这是我的问题以及它是如何解决的:1)我安装了Cx_Oracle(来自32位Windows安装包)和Oracle Instant Client(32位),它在我运行python 2.7的64位系统上运行得很好.5对于32位系统2)我在虚拟机上做了同样的事情(运行64位系统)并且它没有工作3)为了让它在VM上工作,我重新安装了所有的东西64位系统(python,Instant Client,Cx_Oracle),它终于奏效了

http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html http://sourceforge.net/projects/cx-oracle/files/5.1.2/

此外,请确保下载与您的数据库版本对应的cx_Oracle和Instant客户端(在我的情况下为11g).希望这可以帮助.

python dll cx-oracle importerror

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

本地 QEventLoop 的工作原理

我的问题是一般性的,与 QT 中QEventLoop类的使用有关。我对此有两个主要问题。

问题1)它在QT内部如何工作(我主要关心的是为什么QEventLoop对象的执行不会阻塞QT应用程序主循环 - [编辑3]最后一条评论不正确,请参阅下面的答案)。
详情请参阅下文。

问题2)除了阻塞之外还有其他目的吗?看来我只能遇到QEventLoop用于等待目的的例子。
可以用于其他目的吗?就像我们可以想象将特定事件的处理从主应用程序循环委托给本地 QEventLoop 吗?(不确定这个问题是否有意义)

问题1)的展开:

我对 QT 主事件循环基本工作原理的理解如下。应用程序主事件循环(QCoreApplication::exec() )从队列中获取QEvent “E”,并将其分派到它决定事件应前往的QObject “A”(例如,事件的位置和 Z 值)如果按下鼠标左键则为QWidget ) 。如果我们假设对象“A”正在使用事件“E”,则调用该对象的事件方法(还有其他便利方法和事件过滤器,但我们假设事件方法处理我们案例中的事件) - 一些处理与对象“A”相关的事件发生在这里 - 并返回 true。然后,QT主事件循环开始处理队列中的下一个事件,依此类推。

但是,如果对象“A”的事件方法的调用中存在某些阻塞,我希望主应用程序循环被阻塞,因为它等待接收者(对象“A”)的事件方法返回。 ..
例如,如果事件的处理最终调用对象“A”的方法,我们在其中创建一个永远不会退出的本地QEventLoop,我的期望是整个应用程序停止并且不再处理任何事件,直到本地QEventLoop退出,对象“A”的事件方法返回。
否则,这是不正确的,因为我可以看到本地QEventLoop没有阻止应用程序主事件循环...
有人可以让我更深入地了解本地QEventLoop如何工作吗? [编辑3]参见下面的答案,本地事件循环处理事件

---- 编辑 1 ----

如果我不清楚,我很抱歉,这实际上很难用语言解释,所以下面是一个小代码片段,以更好地说明我的问题 1

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public …
Run Code Online (Sandbox Code Playgroud)

c++ qt qeventloop

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

将sys.stdout作为参数传递给进程

我传递"sys.stdout"作为进程的参数,然后进程在执行其内容时写入"sys.stdout".

import multiprocessing
import sys
def worker_with(stream):
    stream.write('In the process\n')

if __name__ == '__main__':
    sys.stdout.write('In the main\n')
    lock = multiprocessing.Lock()

    w = multiprocessing.Process(target=worker_with, args=(sys.stdout,))

    w.start()
    w.join()
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用,它返回以下错误:"ValueError:关闭文件上的操作".

我尝试运行相同的代码,但直接调用该函数而不是生成一个进程,它工作,它打印到控制台.我也尝试运行相同的代码,但直接在函数内部调用sys.stdout,将其作为一个进程生成它并且它可以工作.问题似乎是将sys.stout作为进程的参数传递.

有人知道为什么吗?

注意:此代码的灵感来自教程PYMOTW - 进程之间的通信.

编辑:我在Windows7上运行Python 2.7.10,32位.

python stdout multiprocessing sys

3
推荐指数
1
解决办法
1228
查看次数

标签 统计

python ×2

c++ ×1

cx-oracle ×1

dll ×1

importerror ×1

multiprocessing ×1

qeventloop ×1

qt ×1

stdout ×1

sys ×1