小编Int*_*rer的帖子

Dockerfile 的“/app”工作目录是什么?

docker docs 入门教程第 2 部分中,它有一个制作 Dockerfile。它指示添加以下行:

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app
Run Code Online (Sandbox Code Playgroud)

什么是/app,为什么这是一个必要的步骤?

docker dockerfile

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

使用 pytest.fixture 返回模拟对象的正确方法

我正在尝试设置被测目标@pytest.fixture并在模块中的所有测试中使用它。我能够正确修补测试,但是在我添加@pytest.fixture返回模拟对象并在其他单元测试中调用模拟对象后,该对象开始引用回原始函数。

以下是我拥有的代码。我期望mocked_worker单元测试中的 引用返回值,但它正在调用实际os.getcwd方法。

请帮我更正代码:

import os
import pytest
from unittest.mock import patch

class Worker:
    def work_on(self):
        path = os.getcwd()
        print(f'Working on {path}')
        return path

@pytest.fixture()
def mocked_worker():
    with patch('test.test_module.os.getcwd', return_value="Testing"):
        result = Worker()
    return result

def test_work_on(mocked_worker):
    ans = mocked_worker.work_on()
    assert ans == "Testing"
Run Code Online (Sandbox Code Playgroud)

python unit-testing pytest python-3.x python-unittest

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

Python 输入 TypeVar(A, B, covariant=True) 是什么意思?

今天我深入研究了 Liskov 的替换原则和协方差/逆变。

我被困在以下之间的区别上:

  1. T = TypeVar("T", bound=Union[A, B])
  2. T = TypeVar("T", A, B, covariant=True)

我对#1 的理解

TypeVar('T', A, B) 和 TypeVar('T', bound=Union[A, B]) 的区别

这个答案明确指出T可以是:

  1. Union[A, B](或任何亚型的联合ABUnion[A, BChild]
  2. A(或 的任何子类型A
  3. B(或 的任何子类型B

这对我来说很有意义。


有缺陷的理解#2

MyPy 不允许受约束的 TypeVar 是协变的?定义具有约束但协变的键值类型的通用字典

重新提及bound=Union[A, B]案例,但没有理解选项#2 的含义,A, B, covariant=True

我试过玩弄mypy,但似乎无法弄清楚。 谁能指出这是什么意思?

认为这意味着:

  1. A(或 的任何子类型A
  2. B(或 …

python oop static-typing covariance mypy

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

pip 安装environment.yml,就好像它是requirements.txt

我有一个environment.yml文件,但不想使用 Conda:

name: foo
channels:
  - defaults
dependencies:
  - matplotlib=2.2.2
Run Code Online (Sandbox Code Playgroud)

是否可以像文件一样pip安装依赖项?environment.ymlrequirements.txt

我尝试过pip install -r environment.yml,但它不适用于pip==22.1.2.

python pip requirements.txt conda python-packaging

14
推荐指数
4
解决办法
1万
查看次数

使用 Query DSL 查询某个字段是否包含字符串

我正在尝试过滤 Kibana 以查找包含字符串“pH”的字段。该字段称为extra.monitor_value_name. 潜在值的示例有Temperature_ABC01DO_ABC01、 或pH_ABC01

Kibana 的 Elasticsearch Query DSL 似乎没有“包含字符串”,因此我需要自定义查询。

我是 Query DSL 的新手,您能帮我创建查询吗?

另外,将其称为 Query DSL 是否合适?我什至不确定措辞是否正确。

elasticsearch elasticsearch-dsl elastic-stack

12
推荐指数
2
解决办法
4万
查看次数

为什么不能使用 Python 的 walrus 运算符来设置实例属性?

我刚刚了解到新的 walrus 运算符 ( :=) 不能用于设置实例属性,它应该是无效的语法(引发 a SyntaxError)。

为什么是这样? (你能提供一个提到这个的官方文档的链接吗?)

我查看了PEP 572,找不到是否/在哪里记录了这一点。


研究

这个答案在没有解释或来源的情况下提到了这个限制:

您不能在对象属性上使用 walrus 运算符


示例代码

class Foo:
    def __init__(self):
        self.foo: int = 0

    def bar(self, value: int) -> None:
        self.spam(self.foo := value)  # Invalid syntax

    def baz(self, value: int) -> None:
        self.spam(temp := value)
        self.foo = temp

    def spam(self, value: int) -> None:
        """Do something with value."""
Run Code Online (Sandbox Code Playgroud)

尝试导入Foo结果为SyntaxError

    self.spam(self.foo := value)
              ^
SyntaxError: cannot use assignment expressions with …
Run Code Online (Sandbox Code Playgroud)

python syntax-error python-3.8 walrus-operator

12
推荐指数
2
解决办法
1455
查看次数

使用子文件夹中的 setup.cfg 预提交 flake8

flake8与一堆插件一起使用(,,flake8-docstrings)。我已将它们全部预安装到.flake8-isortflake8-blackvenv

\n

我的仓库要检查pre-commit

\n
    \n
  • 根文件夹有两个包
  • \n
  • 每个都有自己的\n
      \n
    • pyproject.toml(配置blackisort
    • \n
    • setup.cfg(配置flake8pydocstyle
    • \n
    \n
  • \n
\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foo\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.cfg\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 (the package)\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 bar\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.cfg\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 (the package)\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 venv\n
Run Code Online (Sandbox Code Playgroud)\n

我想为这两个包调用flake8via 。pre-commit

\n

这是我目前的做法:

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foo\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.cfg\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 (the package)\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 bar\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.cfg\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 (the package)\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 venv\n …
Run Code Online (Sandbox Code Playgroud)

pre-commit pre-commit-hook flake8 pre-commit.com

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

pip install via requests.txt 指定直接 GitHub 私有存储库 + 分支名称,错误退出状态 128

我正在尝试将一个包添加到我的requirements.txt文件中,即:

  • 来自私人 GitHub 存储库
    • 我是私人回购的成员
    • 我已经ssh配置了私人仓库
  • 来自 之外的一个分支master,其名称中带有斜杠
  • 使用ssh协议

互联网上到处都是关于这个话题的问题。以下是关于此的pip文档

pip install -e "vcs+protocol://repo_url/#egg=pkg&subdirectory=pkg_dir"

以及来自如何在requirements.txt中声明直接github源的GitHub答案

git+git://github.com/path/to/package-two@master#egg=package-two


尝试方法#1

我试图在我的requirements.txt文件中使用这个答案:

-e git+ssh://github.com/Organization/repo-name.git@branch/name#egg=foo
Run Code Online (Sandbox Code Playgroud)

我收到错误:

ERROR: Command errored out with exit status 128: git clone -q ssh://github.com/Organization/repo-name.git /path/to/venv/src/foo Check the logs for full command output.
Run Code Online (Sandbox Code Playgroud)

当我使用以下选项查看日志时--log

-e git+ssh://github.com/Organization/repo-name.git@branch/name#egg=foo
Run Code Online (Sandbox Code Playgroud)

尝试方法#2

我尝试的另一种方法requirements.txt

-e git+git@github.com:Organization/repo-name.git#egg=foo
Run Code Online (Sandbox Code Playgroud)

这里面的克隆确实有效!它还打印此警告:DEPRECATION: This form of VCS requirement is being deprecated

不幸的是,我无法弄清楚如何以这种格式指定分支名称。


我究竟做错了什么?我错过了什么吗?

仅供参考,我的版本:

ERROR: …
Run Code Online (Sandbox Code Playgroud)

python git pip github requirements.txt

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

AWS S3 Glacier 上传存档需要很长时间才能完成执行 - 检查状态或加快上传速度的方法?

我正在尝试.tar.gz使用upload-archive命令 ( docs )将一些文件上传到 AWS S3 Glacier 。

upload-archive一天前,我在一个 29 GB 的.tar.gz文件上运行了该命令,如下所示:

aws glacier upload-archive --vault-name my-vault --account-id - --archive-description "my description" --body my-file.tar.gz
Run Code Online (Sandbox Code Playgroud)

今天查了一下,发现还没有执行完。


我的问题是两部分:

  • 有什么方法可以查看命令是否仍在运行?
    • 进度条会很棒
  • 有什么方法(或替代方法)可以加速upload-archive

仅供参考,我正在使用aws-cli==2.0.17. 预先感谢您的任何帮助!


**编辑**

运行两天后,该upload-archive命令出错并显示以下消息:

An error occurred (InvalidParameterValueException) when calling the UploadArchive operation: Invalid Content-Length: 30957118
Run Code Online (Sandbox Code Playgroud)

这导致aws-cli #3413. 那里的帖子与以下所有答案一致。

tar amazon-s3 amazon-web-services amazon-glacier aws-cli

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

Python通过win32com运行MessageQueue.Peek,如何正确设置超时时间?

首先,我想说如果有人可以在这里提供帮助,您真是不可思议。

一般问题

我的Python程序需要与MSMQ进行交互。基本上,我想窥视一个队列,如果队列中没有任何内容,则指定一个超时。

但是,尽管我已尽力而为,但当队列中先前没有任何值时,我无法让Peek()等待超时间隔。 您能否指出此代码中缺少的内容?


我当前的代码

现在是我的代码:

from socket import gethostname

import win32com.client
import pythoncom

import clr
clr.AddReference("System")
clr.AddReference("System.Messaging")
from System import TimeSpan
from System.Messaging import MessageQueue


# Source: [1]
# [1] https://docs.microsoft.com/en-us/previous-versions/windows/desktop/msmq/ms707027%28v%3dvs.85%29
MQ_DENY_NONE = 0x0
MQ_PEEK_ACCESS = 0x1
MQ_SEND_ACCESS = 0x2


# Set up queue
pythoncom.CoInitialize()
qinfo = win32com.client.Dispatch("MSMQ.MSMQQueueInfo")
qinfo.FormatName = f"direct=os:{gethostname()}\\PRIVATE$\\MyQueue"
queue = qinfo.Open(MQ_PEEK_ACCESS, MQ_DENY_NONE)

# Receive a value
timeout_sec = 1.0
timespan = TimeSpan.FromSeconds(timeout_sec)
label, body = "", ""
# TODO: timeout value does not appear working. …
Run Code Online (Sandbox Code Playgroud)

python msmq msmq-wcf win32com pythoncom

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