我如何让 Gremlin-Python 和 gremlin-server 3.4.3 一起工作?
How do i get Gremlin-Python with gremlin-server 3.4.3 to work?
我的环境是:
java -version
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)
python3 --version
Python 3.7.4
这应该是唯一相关的环境部分。不幸的是,我在 MacOS 上使用 macports 可能会有所不同,这应该不是问题。
我刚刚在 Ubuntu 18.04 LTS 上进行了测试,参见 http://wiki.bitplan.com/index.php/Gremlin_python#Installlation_automation 并且行为是相同的。
所以我想试试 gremlin-python。
我发现 https://pypi.org/project/gremlinpython/
并愉快地添加
gremlinpython
给我的 requirements.txt
sudo -H pip install -r requirements.txt
运行 成功了-太棒了。
让我们找一些 python 代码来玩 .
有。
哦 - 我需要一个服务器...
我们来下载吧
如上例所述解压缩并为其创建启动文件:
gspath=$HOME/Downloads/apache-tinkerpop-gremlin-server-3.4.3
#$gspath/bin/gremlin-server.sh install org.apache.tinkerpop gremlin-python 3.4.3
$gspath/bin/gremlin-server.sh $gspath/conf/gremlin-server-modern-py.yaml
它不起作用 - 从 tornado 获得 599 超时。
查看:
尝试提示,例如使用 0.0.0.0 作为主机
检查启动。
糟糕 - 出现错误:
Could not initialize gremlin-jython GremlinScriptEngine as init script could not be evaluated
java.util.concurrent.CompletionException: java.lang.IllegalArgumentException: gremlin-jython is not an available GremlinScriptEngine
at java.util.concurrent.CompletableFuture.reportJoin(CompletableFuture.java:375)
at java.util.concurrent.CompletableFuture.join(CompletableFuture.java:1934)
at org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.lambda$new(ServerGremlinExecutor.java:141)
at java.util.LinkedHashMap$LinkedKeySet.forEach(LinkedHashMap.java:559)
at org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.<init>(ServerGremlinExecutor.java:136)
at org.apache.tinkerpop.gremlin.server.GremlinServer.<init>(GremlinServer.java:122)
at org.apache.tinkerpop.gremlin.server.GremlinServer.<init>(GremlinServer.java:86)
at org.apache.tinkerpop.gremlin.server.GremlinServer.main(GremlinServer.java:345)
Caused by: java.lang.IllegalArgumentException: gremlin-jython is not an available GremlinScriptEngine
at org.apache.tinkerpop.gremlin.jsr223.CachedGremlinScriptEngineManager.registerLookUpInfo(CachedGremlinScriptEngineManager.java:95)
at org.apache.tinkerpop.gremlin.jsr223.CachedGremlinScriptEngineManager.getEngineByName(CachedGremlinScriptEngineManager.java:58)
at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval[=15=](GremlinExecutor.java:266)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
[WARN] ServerGremlinExecutor - Could not initialize gremlin-python GremlinScriptEngine as init script could not be evaluated
java.util.concurrent.CompletionException: java.lang.IllegalArgumentException: gremlin-python is not an available GremlinScriptEngine
at java.util.concurrent.CompletableFuture.reportJoin(CompletableFuture.java:375)
at java.util.concurrent.CompletableFuture.join(CompletableFuture.java:1934)
at org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.lambda$new(ServerGremlinExecutor.java:141)
at java.util.LinkedHashMap$LinkedKeySet.forEach(LinkedHashMap.java:559)
at org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.<init>(ServerGremlinExecutor.java:136)
at org.apache.tinkerpop.gremlin.server.GremlinServer.<init>(GremlinServer.java:122)
at org.apache.tinkerpop.gremlin.server.GremlinServer.<init>(GremlinServer.java:86)
at org.apache.tinkerpop.gremlin.server.GremlinServer.main(GremlinServer.java:345)
Caused by: java.lang.IllegalArgumentException: gremlin-python is not an available GremlinScriptEngine
at org.apache.tinkerpop.gremlin.jsr223.CachedGremlinScriptEngineManager.registerLookUpInfo(CachedGremlinScriptEngineManager.java:95)
at org.apache.tinkerpop.gremlin.jsr223.CachedGremlinScriptEngineManager.getEngineByName(CachedGremlinScriptEngineManager.java:58)
at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval[=15=](GremlinExecutor.java:266)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
提到应该安装服务器插件。我原以为
$gspath/bin/gremlin-server.sh install org.apache.tinkerpop gremlin-python 3.4.3
会这样做,当我再次 运行 时,我得到:
Installing dependency org.apache.tinkerpop gremlin-python 3.4.3
Could not install the dependency: a module with the name gremlin-python is already installed
如何从这里开始工作?
我将python测试代码缩减为:
# https://pypi.org/project/gremlinpython/
# start GremlinServer
# bin/gremlin-server.sh -i org.apache.tinkerpop gremlin-python 3.2.2-SNAPSHOT
# bin/gremlin-server.sh conf/gremlin-server-modern-py.yaml
# in practice, you really only need the 3 imports below
from gremlin_python import statics
from gremlin_python.structure.graph import Graph
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
# this allows us to do g.V().repeat(out()) instead of g.V().repeat(__.out())-type traversals
#statics.load_statics(globals())
# create a remote connection using RemoteStrategy
graph = Graph()
g = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182','g'))
print (g.V().count().value())
我认为您只是抓住了代码、脚本和答案的点点滴滴,它们在 TinkerPop 多年发展过程中的各种版本方面不匹配。
我认为您只需要重新开始并简化即可。
- 选择必须最近发布的版本 3.4.3 和 download Gremlin 服务器。
- 解压缩并启动服务器:
bin/gremlin-server.sh conf/gremlin-server-modern.yaml
,最初尝试从 "localhost" 连接,这样就不需要更改配置并保持简单。
- 验证您可以使用 Gremlin Console 连接到它。
- 现在安装 gremlinpython,pip 确保使用 3.4.3。
此时我希望以下代码可以开箱即用:
g=traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
print (g.V().count().toList())
请注意,我用 toList()
终止了遍历(我注意到您的代码没有这样的 terminating step) - without that step the traversal will not be executed。我不确定这是否是您面临的问题的一部分。
至于这个命令:
bin/gremlin-server.sh install org.apache.tinkerpop gremlin-python 3.4.3
如果您打算将本机 python lambda 表达式发送到服务器,您只需要 运行。虽然这听起来不错,但请记住,您应该尽可能避免使用 lambda,而且 python ScriptEngine 在缓存和执行方面不如 Groovy 那样健壮。如果你绝对必须使用 lambda,我更喜欢 Groovy,即使你在 Python 中编码。也就是说,我不确定为什么您在服务器启动时遇到错误(事实上,我实际上使用 conf/gremlin-server-modern-py.yaml
测试了简单启动并且它启动时没有错误)。也许如果您使用全新的设置重试,您将获得一个干净的开始。
建立基本配置后,您可以进行调整,例如更改 Gremlin 服务器 yaml 文件中的 host
配置,以便您可以从外部 IP 地址连接到它。
基于@stephen mallette 的努力,我创建了:
https://github.com/WolfgangFahl/gremlin-python-tutorial
在
中有详细说明
http://wiki.bitplan.com/index.php/Gremlin_python
有可用的基于脚本的安装:
./run -h
usage: ./run [-h|-i|-s|-c]
-h|--help: show this usage
-i|--install: install prerequisites
-s|--server: start server
-c|--console: start console
-p|--python: start python trial code
它尝试自动执行必要的步骤
- 安装
- Gremlin-Server开始
- Gremlin-Console 开始(用于调试)
- Python 脚本开始
1.安装
run -i
安装
- gremlin 服务器
- gremlin 控制台
- gremlin python 模块
2。 Gremlin-Server开始
./run -s
在前台使用默认 yaml-file 启动 gremlin 服务器
3。 Gremlin-Console开始(用于调试)
./run -c
启动 gremlin 控制台
4. Python 脚本开始
./run -p
启动 python 测试脚本。
# minimal imports
from gremlin_python.process.anonymous_traversal import traversal
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
# get the remote graph traversal
g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
vCount=g.V().count().next()
print("The modern graph has %d vertices" % (vCount))
预期结果:
starting python test code
The modern graph has 6 vertices
以上脚本已通过以下测试:
- Ubuntu 18.04 LTS
- 特拉维斯
- MacOS 和 MacPorts
我怀疑您已经有解决此问题的方法 - 但我认为 599 是因为您无法通过本地计算机设置以外的任何其他方式访问 ws 端口。我在隔离安装时遇到了类似的问题。
如果您将 gremlin yaml 中的主机 属性 设置为 0.0.0.0 - 它将监听所有接口。在 localhost 上测试所有内容给了我一种错误的安全感 - 当我监听所有网络接口时有效 - 这反过来又允许我有单独的客户端到 gremlin 服务器。
我的环境是:
java -version
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)
python3 --version
Python 3.7.4
这应该是唯一相关的环境部分。不幸的是,我在 MacOS 上使用 macports 可能会有所不同,这应该不是问题。
我刚刚在 Ubuntu 18.04 LTS 上进行了测试,参见 http://wiki.bitplan.com/index.php/Gremlin_python#Installlation_automation 并且行为是相同的。
所以我想试试 gremlin-python。 我发现 https://pypi.org/project/gremlinpython/ 并愉快地添加
gremlinpython
给我的 requirements.txt
sudo -H pip install -r requirements.txt
运行 成功了-太棒了。 让我们找一些 python 代码来玩 .
有。
哦 - 我需要一个服务器...
我们来下载吧
如上例所述解压缩并为其创建启动文件:
gspath=$HOME/Downloads/apache-tinkerpop-gremlin-server-3.4.3
#$gspath/bin/gremlin-server.sh install org.apache.tinkerpop gremlin-python 3.4.3
$gspath/bin/gremlin-server.sh $gspath/conf/gremlin-server-modern-py.yaml
它不起作用 - 从 tornado 获得 599 超时。
查看:
尝试提示,例如使用 0.0.0.0 作为主机
检查启动。
糟糕 - 出现错误:
Could not initialize gremlin-jython GremlinScriptEngine as init script could not be evaluated
java.util.concurrent.CompletionException: java.lang.IllegalArgumentException: gremlin-jython is not an available GremlinScriptEngine
at java.util.concurrent.CompletableFuture.reportJoin(CompletableFuture.java:375)
at java.util.concurrent.CompletableFuture.join(CompletableFuture.java:1934)
at org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.lambda$new(ServerGremlinExecutor.java:141)
at java.util.LinkedHashMap$LinkedKeySet.forEach(LinkedHashMap.java:559)
at org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.<init>(ServerGremlinExecutor.java:136)
at org.apache.tinkerpop.gremlin.server.GremlinServer.<init>(GremlinServer.java:122)
at org.apache.tinkerpop.gremlin.server.GremlinServer.<init>(GremlinServer.java:86)
at org.apache.tinkerpop.gremlin.server.GremlinServer.main(GremlinServer.java:345)
Caused by: java.lang.IllegalArgumentException: gremlin-jython is not an available GremlinScriptEngine
at org.apache.tinkerpop.gremlin.jsr223.CachedGremlinScriptEngineManager.registerLookUpInfo(CachedGremlinScriptEngineManager.java:95)
at org.apache.tinkerpop.gremlin.jsr223.CachedGremlinScriptEngineManager.getEngineByName(CachedGremlinScriptEngineManager.java:58)
at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval[=15=](GremlinExecutor.java:266)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
[WARN] ServerGremlinExecutor - Could not initialize gremlin-python GremlinScriptEngine as init script could not be evaluated
java.util.concurrent.CompletionException: java.lang.IllegalArgumentException: gremlin-python is not an available GremlinScriptEngine
at java.util.concurrent.CompletableFuture.reportJoin(CompletableFuture.java:375)
at java.util.concurrent.CompletableFuture.join(CompletableFuture.java:1934)
at org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.lambda$new(ServerGremlinExecutor.java:141)
at java.util.LinkedHashMap$LinkedKeySet.forEach(LinkedHashMap.java:559)
at org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.<init>(ServerGremlinExecutor.java:136)
at org.apache.tinkerpop.gremlin.server.GremlinServer.<init>(GremlinServer.java:122)
at org.apache.tinkerpop.gremlin.server.GremlinServer.<init>(GremlinServer.java:86)
at org.apache.tinkerpop.gremlin.server.GremlinServer.main(GremlinServer.java:345)
Caused by: java.lang.IllegalArgumentException: gremlin-python is not an available GremlinScriptEngine
at org.apache.tinkerpop.gremlin.jsr223.CachedGremlinScriptEngineManager.registerLookUpInfo(CachedGremlinScriptEngineManager.java:95)
at org.apache.tinkerpop.gremlin.jsr223.CachedGremlinScriptEngineManager.getEngineByName(CachedGremlinScriptEngineManager.java:58)
at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval[=15=](GremlinExecutor.java:266)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
提到应该安装服务器插件。我原以为
$gspath/bin/gremlin-server.sh install org.apache.tinkerpop gremlin-python 3.4.3
会这样做,当我再次 运行 时,我得到:
Installing dependency org.apache.tinkerpop gremlin-python 3.4.3
Could not install the dependency: a module with the name gremlin-python is already installed
如何从这里开始工作?
我将python测试代码缩减为:
# https://pypi.org/project/gremlinpython/
# start GremlinServer
# bin/gremlin-server.sh -i org.apache.tinkerpop gremlin-python 3.2.2-SNAPSHOT
# bin/gremlin-server.sh conf/gremlin-server-modern-py.yaml
# in practice, you really only need the 3 imports below
from gremlin_python import statics
from gremlin_python.structure.graph import Graph
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
# this allows us to do g.V().repeat(out()) instead of g.V().repeat(__.out())-type traversals
#statics.load_statics(globals())
# create a remote connection using RemoteStrategy
graph = Graph()
g = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182','g'))
print (g.V().count().value())
我认为您只是抓住了代码、脚本和答案的点点滴滴,它们在 TinkerPop 多年发展过程中的各种版本方面不匹配。
我认为您只需要重新开始并简化即可。
- 选择必须最近发布的版本 3.4.3 和 download Gremlin 服务器。
- 解压缩并启动服务器:
bin/gremlin-server.sh conf/gremlin-server-modern.yaml
,最初尝试从 "localhost" 连接,这样就不需要更改配置并保持简单。 - 验证您可以使用 Gremlin Console 连接到它。
- 现在安装 gremlinpython,pip 确保使用 3.4.3。
此时我希望以下代码可以开箱即用:
g=traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
print (g.V().count().toList())
请注意,我用 toList()
终止了遍历(我注意到您的代码没有这样的 terminating step) - without that step the traversal will not be executed。我不确定这是否是您面临的问题的一部分。
至于这个命令:
bin/gremlin-server.sh install org.apache.tinkerpop gremlin-python 3.4.3
如果您打算将本机 python lambda 表达式发送到服务器,您只需要 运行。虽然这听起来不错,但请记住,您应该尽可能避免使用 lambda,而且 python ScriptEngine 在缓存和执行方面不如 Groovy 那样健壮。如果你绝对必须使用 lambda,我更喜欢 Groovy,即使你在 Python 中编码。也就是说,我不确定为什么您在服务器启动时遇到错误(事实上,我实际上使用 conf/gremlin-server-modern-py.yaml
测试了简单启动并且它启动时没有错误)。也许如果您使用全新的设置重试,您将获得一个干净的开始。
建立基本配置后,您可以进行调整,例如更改 Gremlin 服务器 yaml 文件中的 host
配置,以便您可以从外部 IP 地址连接到它。
基于@stephen mallette 的努力,我创建了:
https://github.com/WolfgangFahl/gremlin-python-tutorial
在
中有详细说明http://wiki.bitplan.com/index.php/Gremlin_python
有可用的基于脚本的安装:
./run -h
usage: ./run [-h|-i|-s|-c]
-h|--help: show this usage
-i|--install: install prerequisites
-s|--server: start server
-c|--console: start console
-p|--python: start python trial code
它尝试自动执行必要的步骤
- 安装
- Gremlin-Server开始
- Gremlin-Console 开始(用于调试)
- Python 脚本开始
1.安装
run -i
安装
- gremlin 服务器
- gremlin 控制台
- gremlin python 模块
2。 Gremlin-Server开始
./run -s
在前台使用默认 yaml-file 启动 gremlin 服务器
3。 Gremlin-Console开始(用于调试)
./run -c
启动 gremlin 控制台
4. Python 脚本开始
./run -p
启动 python 测试脚本。
# minimal imports
from gremlin_python.process.anonymous_traversal import traversal
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
# get the remote graph traversal
g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
vCount=g.V().count().next()
print("The modern graph has %d vertices" % (vCount))
预期结果:
starting python test code
The modern graph has 6 vertices
以上脚本已通过以下测试:
- Ubuntu 18.04 LTS
- 特拉维斯
- MacOS 和 MacPorts
我怀疑您已经有解决此问题的方法 - 但我认为 599 是因为您无法通过本地计算机设置以外的任何其他方式访问 ws 端口。我在隔离安装时遇到了类似的问题。
如果您将 gremlin yaml 中的主机 属性 设置为 0.0.0.0 - 它将监听所有接口。在 localhost 上测试所有内容给了我一种错误的安全感 - 当我监听所有网络接口时有效 - 这反过来又允许我有单独的客户端到 gremlin 服务器。