Amazon的Lambda似乎创建了一个新的virtualenv
(假设您使用lambda-uploader
并有一个requirements.txt
文件)。我一直在尝试使用pip freeze
作为子流程来查看该虚拟环境中的内容,但是没有运气。当我执行列出Python版本(3.6)的命令时,它就可以工作。
请注意,当我导入软件包时,它确实可以安装我的requirements.txt
中的东西。我只是无法列出它们。
import subprocess
def lambda_handler(event, _):
# py_data = subprocess.run(['python -V'], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
py_data = subprocess.run(['python', '-V'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print("py_data.stdout = %s" % str(py_data.stdout))
print("py_data.stderr = %s" % str(py_data.stderr))
# pip_data = subprocess.run(['pip freeze'], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# pip_data = subprocess.run(['pip', 'freeze'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# print("pip_data.stdout = %s" % str(pip_data.stdout))
# print("pip_data.stderr = %s" % str(pip_data.stderr))
pip_data = subprocess.Popen(['pip', 'freeze'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print("pip_data.stdout = %s" % str(pip_data.stdout.read()))
print("pip_data.stderr = %s" % str(pip_data.stderr.read()))
return {"statusCode": 200, "Message": bs_status}
尽管列出了Python版本,但我尝试过的Subprocess的所有变体似乎都没有用。
那么我该如何做pip freeze
并显示Lambda在其中运行的任何虚拟或其他环境的内容?