小编MLu*_*MLu的帖子

防止pip安装某些依赖项

我们正在用 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/.

那可能吗?

谢谢!

python pip aws-lambda

10
推荐指数
2
解决办法
1万
查看次数

pytest 参数化测试的自定义名称

我有一个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_case0test_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 pytest python-3.x

6
推荐指数
1
解决办法
3784
查看次数

为什么我的包不能用“pipx”安装?

我有一个用于打包的Python 项目aws-ssm-tools 。setup.py它带有 3 个脚本:ssm-tunnelssm-sessionssm-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)

python pip pypi setup.py

5
推荐指数
1
解决办法
6371
查看次数

使 Terraform 忽略从服务返回的列表项的顺序

我正在创建一个 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块。

amazon-web-services terraform terraform-provider-aws

5
推荐指数
1
解决办法
7679
查看次数

跳过帧并尝试结束OpenCV中的RTSP流

我在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()才能赶上流,丢弃丢失的帧并开始处理最新的帧?

谢谢!

python opencv video-capture rtsp

3
推荐指数
2
解决办法
2860
查看次数

Python Kivy不会使用SDL2,坚持使用pygame

我很难让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)

python kivy sdl-2

3
推荐指数
1
解决办法
2271
查看次数

awk:从输入中打印匹配组

我有一个日志文件,其中正在寻找字符串,--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,如果该事项

谢谢!

awk

1
推荐指数
1
解决办法
1870
查看次数