我们正在用 Python 为 Alexa 技能开发一个AWS Lambda函数,并pip用于将ask-sdk包安装到我们的dist/目录中:
pip install -t dist/ ask-sdk
Run Code Online (Sandbox Code Playgroud)
问题在于-t dist/因为pip想要在那里拥有所有依赖项,即使它们是在系统范围内安装的。
现在,ask-sdk依赖于boto3拉入大量其他软件包。但是,AWS Lambda运行时环境提供了boto3并且不需要将其及其依赖项与我们的代码打包在一起。我确实已经boto3安装在系统中并且import boto3可以正常工作,所以我认为pip应该很高兴,但因为-t dist/它总是安装它。
我可以以某种方式安装ask-sdk系统中不存在的只是及其依赖项,例如ask-sdk-core,而不是那些已经安装的依赖项吗?
一种方法是列出所有模块并使用,pip --no-deps但这意味着不断手动跟踪依赖项,我们希望避免这种情况。
不知何故我想告诉pip:如果已经安装了软件包,即使没有安装-t dist/也不要放入副本dist/.
那可能吗?
谢谢!
我有一个pytest测试,它使用@pytest.mark.parametrize装饰器进行参数化,使用自定义函数load_test_cases()从 yaml 文件加载测试用例。
class SelectTestCase:
def __init__(self, test_case):
self.select = test_case['select']
self.expect = test_case['expect']
def __str__(self): # also tried __repr__()
# Attempt to print the 'select' attribute in "pytest -v" output
return self.select
def load_test_cases(path):
with open(path, "rt") as f:
test_cases = yaml.safe_load_all(f)
return [ SelectTestCase(test_case) for test_case in test_cases ]
@pytest.mark.parametrize("test_case", load_test_cases("tests/select-test-cases.yaml"))
def test_select_prefixes(test_case):
# .. run the test
Run Code Online (Sandbox Code Playgroud)
它运行良好,只是运行时的测试pytest -v显示为test_case0、test_case1等参数。
tests/test_resolver.py::test_select_prefixes[test_case0] PASSED [ 40%]
tests/test_resolver.py::test_select_prefixes[test_case1] PASSED …Run Code Online (Sandbox Code Playgroud) 我有一个用于打包的Python 项目aws-ssm-tools 。setup.py它带有 3 个脚本:ssm-tunnel、ssm-session和ssm-copy。
它可以安装并将pip install aws-ssm-tools脚本放入~/.local/bin/.
但是,当我尝试安装它时,pipx它失败了:
~ $ pipx install aws-ssm-tools
No apps associated with package aws-ssm-tools. Try again with '--include-deps'
to include apps of dependent packages, which are listed above. If you are
attempting to install a library, pipx should not be used. Consider using pip or
a similar tool instead.
Run Code Online (Sandbox Code Playgroud)
我有指定的脚本setup.py:
SCRIPTS = [
'ssm-session',
'ssm-copy',
'ssm-tunnel',
'ssm-tunnel-updown.dns-example', …Run Code Online (Sandbox Code Playgroud) 我正在创建一个 AWS IAM 策略,向多个远程账户授予对资源的访问权限。我已将这些帐户列在列表中 - 一切都很好。然而,当 TF 检查后续状态的当前状态时,plan它会以不同的顺序返回,并且 TF 认为必须对其进行更正。如何忽略列表顺序?
这是我的资源:
resource "aws_ecr_repository_policy" "repo" {
policy = jsonencode({
Statement = [
{
Principal = {
AWS = [
"arn:aws:iam::123456789012:root",
"arn:aws:iam::567890123456:root",
"arn:aws:iam::987654321098:root",
]
...
Run Code Online (Sandbox Code Playgroud)
现在,在随后的terraform plan运行中,我得到了一些变化:
~ {
~ Principal = {
~ AWS = [
+ "arn:aws:iam::987654321098:root", <<< swapped order
"arn:aws:iam::123456789012:root",
"arn:aws:iam::567890123456:root",
- "arn:aws:iam::987654321098:root", <<< and here
]
}
Run Code Online (Sandbox Code Playgroud)
AWS 无法预测它返回的顺序,它每次都会改变。我可以忽略该订单吗?理想情况下,不要使用生命周期/ignore_changes忽略整个policy块。
我在Raspberry Pi上的OpenCV 3.4.2中捕获并处理IP摄像机RTSP流。不幸的是,处理过程要花费很多时间,每帧大约需要0.2s,并且流很快就被延迟了。
我不在乎是否跳过某些帧,因此我正在寻找一种方法来捕获和处理下一个帧,然后找到流的末尾。
vcap = cv2.VideoCapture("rtsp://{IPcam}/12")
while(1):
ret, frame = vcap.read()
time.sleep(0.2) # <= Simulate processing time
cv2.imshow('VIDEO', frame)
if cv2.waitKey(1) == 27:
break
vcap.seek_to_end() # <== How to do this?
Run Code Online (Sandbox Code Playgroud)
我该怎么做vcap.seek_to_end()才能赶上流,丢弃丢失的帧并开始处理最新的帧?
谢谢!
我很难让Kivy (1.11.0)在Ubuntu 18.04桌面上使用SDL2。它不断要求pygame,但已被弃用,我不想将它用于新项目。
在全新的Ubuntu 18.04 VM上,我这样做了:
~ $ sudo apt install libsdl2-dev libsdl2-image-dev mesa-common-dev python3-pip python3-venv
~ $ pip3 install --user poetry
~ $ poetry new kivytest
~ $ cd kivytest
~/kivytest $ poetry add kivy pillow
Creating virtualenv kivytest-sUhjZQq9-py3.6 in ~/.cache/pypoetry/virtualenvs
Using version ^1.11.1 for kivy
Using version ^7.0.0 for pillow
Updating dependencies
Resolving dependencies... (2.2s)
Writing lock file
Package operations: 20 installs, 0 updates, 0 removals
- Installing certifi (2019.11.28) …Run Code Online (Sandbox Code Playgroud) 我有一个日志文件,其中正在寻找字符串,--location http://example.com/whatever并且仅对URL感兴趣。它是多行输入,并且此位置字符串在其中一行中的某处,我不知道它在哪一行以及在哪一行。
使用以下awk脚本很容易打印它:
/--location ([^ ]+)/ {
match($0, "--location ([^ ]+)", m);
print m[1]
}
Run Code Online (Sandbox Code Playgroud)
但是,因为我已经在/--location .../模式中匹配了我想要的内容,所以以match()相同的模式运行另一个模式是错误的。
我想知道是否可以从中打印组匹配/--location ([^ ]+)/并在没有match()呼叫的情况下逃脱?
我使用的gawk 3.1,如果该事项
谢谢!