在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,为什么这是一个必要的步骤?
我正在尝试设置被测目标@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) 今天我深入研究了 Liskov 的替换原则和协方差/逆变。
我被困在以下之间的区别上:
T = TypeVar("T", bound=Union[A, B])
T = TypeVar("T", A, B, covariant=True)
我对#1 的理解
TypeVar('T', A, B) 和 TypeVar('T', bound=Union[A, B]) 的区别
这个答案明确指出T
可以是:
Union[A, B]
(或任何亚型的联合A
和B
如Union[A, BChild]
)A
(或 的任何子类型A
)B
(或 的任何子类型B
)
这对我来说很有意义。
我有缺陷的理解#2
MyPy 不允许受约束的 TypeVar 是协变的?定义具有约束但协变的键值类型的通用字典
重新提及bound=Union[A, B]
案例,但没有理解选项#2 的含义,A, B, covariant=True
。
我试过玩弄mypy
,但似乎无法弄清楚。
谁能指出这是什么意思?
我认为这意味着:
A
(或 的任何子类型A
)B
(或 …我有一个environment.yml
文件,但不想使用 Conda:
name: foo
channels:
- defaults
dependencies:
- matplotlib=2.2.2
Run Code Online (Sandbox Code Playgroud)
是否可以像文件一样pip
安装依赖项?environment.yml
requirements.txt
我尝试过pip install -r environment.yml
,但它不适用于pip==22.1.2
.
我正在尝试过滤 Kibana 以查找包含字符串“pH”的字段。该字段称为extra.monitor_value_name
. 潜在值的示例有Temperature_ABC01
、DO_ABC01
、 或pH_ABC01
。
Kibana 的 Elasticsearch Query DSL 似乎没有“包含字符串”,因此我需要自定义查询。
我是 Query DSL 的新手,您能帮我创建查询吗?
另外,将其称为 Query DSL 是否合适?我什至不确定措辞是否正确。
我刚刚了解到新的 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) 我flake8
与一堆插件一起使用(,,flake8-docstrings
)。我已将它们全部预安装到.flake8-isort
flake8-black
venv
我的仓库要检查pre-commit
:
pyproject.toml
(配置black
和isort
)setup.cfg
(配置flake8
和pydocstyle
)\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我想为这两个包调用flake8
via 。pre-commit
这是我目前的做法:
\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) 我正在尝试将一个包添加到我的requirements.txt
文件中,即:
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) 我正在尝试.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
. 那里的帖子与以下所有答案一致。
首先,我想说如果有人可以在这里提供帮助,您真是不可思议。
一般问题
我的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 ×6
pip ×2
amazon-s3 ×1
aws-cli ×1
conda ×1
covariance ×1
docker ×1
dockerfile ×1
flake8 ×1
git ×1
github ×1
msmq ×1
msmq-wcf ×1
mypy ×1
oop ×1
pre-commit ×1
pytest ×1
python-3.8 ×1
python-3.x ×1
pythoncom ×1
syntax-error ×1
tar ×1
unit-testing ×1
win32com ×1