我不是一个Python开发人员,所以如果这个问题没有多大意义我很抱歉..
我目前正在开发一个包含py脚本的项目,该脚本与用Java编写的服务器进行通信。脚本的相当一部分专门用于根据执行脚本的当前工作目录(cwd)查找服务器jar所在的位置。我虽然可以将脚本和服务器jar打包在某种拉链中,我可以以独立的方式分发和执行,删除整个逻辑以从脚本中获取jar。 有可能吗?
我一直在尝试使用BUCK python_binary来实现此目的,但是,似乎我不能将jar添加为pex的依赖项。
编辑1
按照@sdwilsh的建议我可以使用BUCK来创建一个包含jar的pex,但是,每当我尝试从主python脚本访问它时,它都会因为无法找到jar而失败:
BUCK文件
java_library(
name = 'src_main',
srcs = glob(['src/main/java/**/*.java']),
source = '8',
target = '8',
visibility = [
'PUBLIC',
],
)
java_binary(
name = 'sample_jar',
main_class = 'br.com.samples.jar.Main',
deps = [':src_main'],
visibility = [
'PUBLIC',
],
)
python_library (
name = 'jarlib',
resources = [':sample_jar'],
)
python_binary(
name = 'wrapper',
main = 'wrapper.py',
deps = [':jarlib'],
)
PEX内容
-rw-r--r-- 1 staff 1319 Mar 28 13:07 sample_jar
-rw-r--r-- 1 staff 259 Mar 28 13:15 wrapper.py
-rw-r--r-- 1 staff 308 Mar 28 13:15 wrapper.pyc
-rw-r--r-- 1 staff 917 Mar 28 13:15 __main__.pyc
-rw-r--r-- 1 staff 737 Mar 28 13:15 __main__.py
-rw-r--r-- 1 staff 242 Mar 28 13:15 PEX-INFO
wrapper.py
import sys, subprocess
process = subprocess.Popen(['java', '-jar', 'sample_jar'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print process.communicate()
wrapper.py
的输出
('', 'Error: Unable to access jarfile sample_jar\n')
编辑2
所以我们似乎无法从PEX env引用jar文件。解决方法是将pex资源解压缩到tmp文件夹中并从那里执行所有操作。