python - UNIX/Python - 如何在没有互联网和 pip 的情况下使用 cx_Oracle
问题描述
我的公司(还)不允许我们安装或升级 python3,也不允许在他们的服务器上安装来自 pip 的模块。即使我可以,这台机器也没有连接到互联网。但是我们可以执行 python2 二进制文件
目标
使用cx_Oracle
模块不使用pip
和互联网
临时解决方法
我想到在我的计算机上安装 cx_Oracle 包,然后将安装的模块文件从我的计算机复制到服务器。
所以 server dev 文件夹看起来像这样(只列出有趣的目录和文件,省略__pychache__
和*.pyc
其他无用的*.py
文件):
|-- test_cx_oracle_in_local.py
\-- sqlalchemy/
|-- connectors
|-- databases
|-- dialects
| |-- firebird
| |-- mysql
| |-- mssql
| |-- oracle
| | |-- base.py
| | |-- cx_oracle.py <--- This is the interesting file
| | |-- __init__.py
| | \-- zxjdbc.py
| |-- postgresql
| |-- sqlite
| |-- sybase
|-- engine
|-- event
|-- ext
| \-- declarative
|-- orm
|-- pool
|-- sql
|-- testing
| |-- plugin
| \-- suite
\-- util
测试 1
import cx_Oracle
if __name__ == "__main__":
cx_Oracle.connect(user="xxxxxxxx", password="xxxxxxxx", dns="xxxxxxxx")
输出:
Traceback (most recent call last):
File "test_cx_oracle_in_local.py", line xx, in <module>
import cx_oracle
ImportError: No module named cx_Oracle
测试 2
from sqlalchemy.dialects.oracle.cx_oracle import cx_Oracle
if __name__ == "__main__":
cx_Oracle.connect(user="xxxxxxxx", password="xxxxxxxx", dns="xxxxxxxx")
输出:
Traceback (most recent call last):
File "test_cx_oracle_in_local.py", line 36, in __init__
self.connection = cx_oracle.connect(user="xxxxxxxx", password="xxxxxxxx", dns="xxxxxxxx")
AttributeError: 'module' object has no attribute 'connect'
测试 3
import os, sys, inspect
sys.path.insert(0, xxxxxxxx) # <--- see link above to see sorin's answer
import cx_oracle
if __name__ == "__main__":
print("SYS_PATH = " + str(sys.path))
cx_Oracle.connect(user="xxxxxxxx", password="xxxxxxxx", dns="xxxxxxxx")
输出:
SYS_PATH = ['/xxxxxxxx/sqlalchemy/dialects/oracle', '/xxxxxxxx/sqlalchemy/dialects', '/xxxxxxxx/sqlalchemy', 'xxxxxxxx', ...]
File "test_cx_oracle_in_local.py", line xx, in <module>
import cx_oracle
File "/xxxxxxxx/sqlalchemy/dialects/oracle/cx_oracle.py", line 286, in <module>
from . import base as oracle
ValueError: Attempted relative import in non-package
请注意
- 服务器操作系统是
UNIX
家庭(不是Windows/MAC) - 我没有 , , 等的版本和
/bin
执行/usr
权/opt
。 - 不能用
pip
,pip
连服务器都没有安装 - 我可以将文件从我的专业计算机下载到服务器
- 从服务器端,ping 或上网是不可能的
- 我目前正在运行,但如果您有
python 2
,我对解决方案感兴趣python 3
问题
如何在cx_Oracle
没有互联网且pip
既+wx
无法访问系统文件夹的情况下充分使用该模块?
解决方案
cx_oracle.py
文件夹中的文件sqlalchemy
实际上不是 cx_Oracle 库 - 它只是实际 cx_Oracle 库的 sqlalchemy 包装器,它是一个编译的二进制文件(包括编译的 ODPI-C 库,用 C 编写)。
我能想到的最简单的方法:
- 下载 cx_Oracle-7.3.0-cp27-cp27mu-manylinux1_x86_64.whl - 这是 cx_Oracle 7.3 的 Python 2.7 版本的 Wheel,最新的 cx_Oracle 支持 Python 2。
- 提取它(它只是一个 zip 文件)并放在
cx_Oracle.so
服务器上的某个位置。这是二进制 cx_Oracle 库文件。 - 将其加载为相对库 - 如果它与您的代码位于同一目录中,
import cx_Oracle
则应该可以。
推荐阅读
- r - 如何修复mgcv中gam()中的错误'terms.formula(formula,data = data)中的错误:ExtractVars中的无效模型公式'
- python - 有没有办法使用 Python 在 chrome 中获取打开选项卡的 url?
- javascript - 如何在不缓冲的情况下显示满载视频?
- python - TF Hub 上 ALBERT 预训练模型的问题
- java - 输入字符串“类型”自定义列表视图抛出数字格式异常
- google-analytics - 谷歌分析可以跟踪使用我们应用程序的唯一用户吗
- sql - 如何在 sql 层次结构上显示祖父母?
- cypress - cypress.io 等待相同的别名
- c# - 使用邮递员测试我的 .Net Web API 时得到 415 Unsupported Media Type
- c# - 统一使用rigidbody.moveposition时如何通过游戏对象