已解决:为什么导入 Python 库会引发语法错误?

SOLVED: Why does importing a Python library throw a syntax error?

已解决:查看答案,我自己的答案

我有一台 Windows 机器,其中一些 Python 代码可以工作,但现在需要在新机器上工作。

我已经安装了相同的 Python 版本 3.6.5。

第一个问题是,当我 运行 代码时,它 无法 找到 re.py 库,实际上在 Python 的 Lib 文件夹中。所以我添加了 sys.path.append('C:\Python\Lib') 现在它可以找到它了。

但现在我从那个库中得到语法错误,我说 import re,那行在 re.py 库中的某些行引发错误。如果我导入 getopt,我也会在某行出现语法错误。

这怎么可能?安装附带的 pythons Lib 文件中的语法错误?

问题是它在机器 1 上运行,相同的文件内容,相同的 python 版本。我的印象是我在这个版本的库的 python.exe 版本中有错误,但我只是下载了 Windows 安装程序并安装了它。

我什至不知道 google 有什么用,有人知道吗?我正在第 5 行的 WeblogicAuto.py 中导入 re。

D:\Jenkins\workspace\weblogic-full-deployment-copy\weblogic-deployment>MainAutoDeployment.py -f DEV -v 2.61.0.12 

Initializing WebLogic Scripting Tool (WLST) ...

Welcome to WebLogic Server Administration Scripting Shell

Type help() for help on available commands

Problem invoking WLST - Traceback (innermost last):
  File "D:\Jenkins\workspace\weblogic-full-deployment-copy\weblogic-deployment\WeblogicAuto.py", line 5, in ?
  File "C:\Python\Lib\re.py", line 247
        b"_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890")
         ^
SyntaxError: invalid syntax

您正在使用 WLST(WebLogic 脚本工具)。

WLST 是 python 的非常具体的分布:

  • 是jython
  • 大致对应python 2.7

并且您尝试从 CPython 3.6.5 发行版导入库。

您需要:

  • 删除您之前添加的sys.path.append
  • 检查 python jython 库路径中的库。这可能是 $HOME/.jython 或 WLST 特定路径(查看 WebLogic 文档)

好的,非常感谢大家,我找到了解决方案,它是关于 Jython 库的。如果有人偶然发现这个问题,我会尝试详细说明。

我在这里所做的是将 java 模块部署到 Oracle Weblogic 应用程序服务器。所以这个答案也会帮助那些试图从 python.

部署到 Weblogic 的人

从一开始我就避免在我进行部署的机器上安装 Webloglogic 软件(那是一个 Jenkins 从机,运行 这些 python 文件,简单的工作)。 我注意到第一台机器(第一台 Jenkins slave)安装了 Weblogic,但我喜欢保持最小化:)

您需要的是 weblogic.jar 和(目前不确定)wlfullclient.jar,它是在 Weblogic 服务器上生成的(google 如果需要或者您可能已经拥有它) .

问题是,即使我有纯 python 代码,当您使用 java weblogic.WLST [=39 调用另一个 python 代码时=],用jython应用就会运行!它的 sys 路径中需要它的库。

在 jython 文件中,我在两台机器(从机)上添加了 print(sys.path) 然后 运行。我注意到这些机器上的路径是不同的,即使你在命令提示符下输入它,你也会得到相同的结果,但与 Jenkins 运行s 时不同。

因此,我没有查看如何修复这些路径并将文件复制到它们,而是在它期望的位置创建了文件夹,并从第一台机器复制了它们(很容易修复,我稍后可能会研究)。

这些是 sys.path 和需要的文件,存在于第一台机器上:

['D:\Jenkins\weblogic\Lib', '__classpath__', 'C:/bea10/wlserver_10.3/server/lib/weblogic.jar', 'C:/bea10/wlserver_10.3/common/wlst/modules/jython-modules.jar/Lib', 'C:/bea10/wlserver_10.3/common/wlst', 'C:/bea10/wlserver_10.3/common/wlst/lib', 'C:/bea10/wlserver_10.3/common/wlst/modules', '.']

这是在第二台机器上 sys.path,所以我简单地复制到那里:

['D:\Jenkins\weblogic\Lib', '__classpath__', 'D:/Jenkins/server/lib/weblogic.jar', 'D:/Jenkins/common/wlst/modules/jython-modules.jar/Lib', 'D:/Jenkins/common/wlst', 'D:/Jenkins/common/wlst/lib', 'D:/Jenkins/common/wlst/modules', '.']

注意 jython-modules.jar 是一个文件,所以如果我了解 java 的工作原理,/Lib 应该来自该文件。

如需了解更多详情,请随时与我联系。