Python 是否手动安装pyOpenSSL和boto3?拖放操作不需要';由于缺少依赖项,因此无法工作

Python 是否手动安装pyOpenSSL和boto3?拖放操作不需要';由于缺少依赖项,因此无法工作,python,python-3.x,dependencies,boto3,splunk,Python,Python 3.x,Dependencies,Boto3,Splunk,我有一个为Splunk编写的应用程序,它依赖于bot3和pyOpenSSL库。除了拖放之外,我还没有找到一种将应用依赖项放入apps bin文件夹的好方法,这对bot3和pyOpenSSL都不起作用 到目前为止,每次我们需要在Splunk中为单个应用程序提供python模块时,我们都会将python模块拖放到$Splunk\u HOME/etc/apps/app\u NAME/bin/module中。在我们需要pyOpenSSL和boto3库之前,这种方法一直有效,因为它们有很多密码和单脚本依赖

我有一个为Splunk编写的应用程序,它依赖于bot3和pyOpenSSL库。除了拖放之外,我还没有找到一种将应用依赖项放入apps bin文件夹的好方法,这对bot3和pyOpenSSL都不起作用

到目前为止,每次我们需要在Splunk中为单个应用程序提供python模块时,我们都会将python模块拖放到$Splunk\u HOME/etc/apps/app\u NAME/bin/module中。在我们需要pyOpenSSL和boto3库之前,这种方法一直有效,因为它们有很多密码和单脚本依赖项,无法正确实现

我所尝试的:

1| python3 -m venv $SPLUNK_HOME/etc/apps/APP_NAME/
2| python3 -m pip install (pyOpenSSL, boxsdk, pyJWT, boto3) < base dependencies
3| move $SPLUNK_HOME/etc/apps/APP_NAME/lib/python3.7/site-packages/ > $/SPLUNK_HOME/etc/apps/APP_NAME/bin
4| Put all my app scripts in $/SPLUNK_HOME/etc/apps/APP_NAME/bin alongside all the modules I just installed to that folder using venv
5| Start Splunk
6| search | search_command arg=0

我想解决这个错误,但是我已经解决了这个依赖性问题一段时间了,所以如果这里有更好的解决方案来获取这些软件包,我很乐意听到它。

您可以使用以下命令将依赖性安装到适当的目录中。确保
$SPLUNK\u HOME
设置正确,并用新应用的名称替换
APP\u NAME

pip install pyOpenSSL -t $SPLUNK_HOME/etc/apps/APP_NAME/bin
pip install boxsdk -t $SPLUNK_HOME/etc/apps/APP_NAME/bin
pip install pyJWT -t $SPLUNK_HOME/etc/apps/APP_NAME/bin
pip install boto3 -t $SPLUNK_HOME/etc/apps/APP_NAME/bin
您可能还需要了解AWS的Splunk附加组件所做的工作,并特意将所需的模块添加到Python的路径中。(
Splunk\u TA\u aws/bin/aws\u bootstrap\u env.py

工具书类

也尝试使用相同的方法安装缺少的依赖项,但我仍然坚持使用“\u constant\u time”我尝试通过以下命令添加python路径:
bin/splunk cmd python3 etc/apps/APP\u NAME/bin/aws\u bootstrap\u env.py
,由于enum34库的原因失败:因此我卸载了enum34库,再次运行它,它成功了,所以我加载了Splunk,它说我丢失了enum,所以我再次安装了它,现在我又回到了原来的“\u constant\u time”异常状态我很抱歉,我不是有意运行该命令的。我的意思是你应该在你的应用程序中添加类似的代码。该代码将把安装在应用程序中的所有库添加到python的搜索路径中,该路径在应用程序中应该是可用的。我将该代码添加到我的应用程序中,并成功运行,这就是我所说的。它不起作用。代码运行了,但我仍然缺少依赖项。我已经使用
bootstrap\u env.py
方法构建了一个对我来说似乎很好的示例。提供的代码和说明
pip install pyOpenSSL -t $SPLUNK_HOME/etc/apps/APP_NAME/bin
pip install boxsdk -t $SPLUNK_HOME/etc/apps/APP_NAME/bin
pip install pyJWT -t $SPLUNK_HOME/etc/apps/APP_NAME/bin
pip install boto3 -t $SPLUNK_HOME/etc/apps/APP_NAME/bin
'''
Add common libs to sys.path
'''


import os
import os.path
import re
import sys
import logging


def setup_python_path():
    # Exclude folder beneath other apps, Fix bug for rest_handler.py
    ta_name = os.path.basename(os.path.dirname(os.path.dirname(__file__)))
    pattern = re.compile(r"[\\/]etc[\\/]apps[\\/][^\\/]+[\\/]bin[\\/]?$")
    new_paths = [path for path in sys.path if not pattern.search(path) or ta_name in path]
    new_paths.insert(0, os.path.dirname(__file__))
    sys.path = new_paths

    bindir = os.path.dirname(os.path.abspath(__file__))
    # We sort the precedence in a decending order since sys.path.insert(0, ...)
    # do the reversing.
    # Insert library folder
    sharedpath = os.path.join(bindir, '3rdparty', 'python3')
    sys.path.insert(0, sharedpath)


# preventing splunklib initialize an unexpected root handler
def setup_null_handler():
    logging.root.addHandler(logging.NullHandler())


def run_module(name):
    instance = __import__(name, fromlist=['main'])
    instance.main()

setup_python_path()
setup_null_handler()