小编Nor*_*ius的帖子

错误:在Docker中的Alpine上安装psycopg2时找不到pg_config可执行文件

我正在尝试使用Postgres和Docker构建Flask应用程序.我想连接到Postgres的AWS RDS实例,但是使用Docker作为我的Flask应用程序.但是,当尝试设置psycopg2它时会遇到错误,因为它无法找到pg_config.这是错误:

Building api
Step 1/5 : FROM python:3.6.3-alpine3.6
 ---> 84c98ca3b5c5
Step 2/5 : WORKDIR /usr/src/app
 ---> Using cache
 ---> 407c158f5ee4
Step 3/5 : COPY . .
 ---> 966df18d329e
Step 4/5 : RUN pip install -r requirements.txt
 ---> Running in 284cc97aeb63
Collecting aniso8601==1.3.0 (from -r requirements.txt (line 1))
  Downloading aniso8601-1.3.0.tar.gz (57kB)
Collecting click==6.7 (from -r requirements.txt (line 2))
  Downloading click-6.7-py2.py3-none-any.whl (71kB)
Collecting Flask==0.12.2 (from -r requirements.txt (line 3))
  Downloading Flask-0.12.2-py2.py3-none-any.whl (83kB)
Collecting Flask-RESTful==0.3.6 (from -r requirements.txt …
Run Code Online (Sandbox Code Playgroud)

python postgresql psycopg2 docker

39
推荐指数
4
解决办法
3万
查看次数

用于组合异步迭代器的map,filter和itertools

Python是否支持异步迭代器上的函数式操作?我知道,我可以使用map,filteritertools懒洋洋地转换和消耗数据与正常的发电机来:

from itertools import accumulate, takewhile

def generator():
    a, b = 1, 1
    while True:
        yield a
        a, b = b, a + b

# create another iterator, no computation is started yet:
another_iterator = takewhile(lambda x: x < 100, accumulate(generator()))
# start consuming data:
print(list(another_iterator))
# [1, 2, 4, 7, 12, 20, 33, 54, 88]
Run Code Online (Sandbox Code Playgroud)

现在,Python 3.6的异步生成器/迭代器不支持同样的事情,因为它们当然没有实现正常的迭代器协议:

async def agenerator():
    a, b = 1, 1
    while True:
        yield a
        a, b = b, …
Run Code Online (Sandbox Code Playgroud)

python python-itertools python-asyncio python-3.6

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

在Prometheus中将实例重新标记为主机名

我有几台具有这样配置的机器上的节点导出器从Prometheus抓取指标:

scrape_configs:
  - job_name: node_exporter
    static_configs:
      - targets:
        - 1.2.3.4:9100
        - 2.3.4.5:9100
        - 3.4.5.6:9100
Run Code Online (Sandbox Code Playgroud)

在Grafana中查看时,这些实例被分配了相当无意义的IP地址。相反,我希望查看其主机名。我认为您应该能够重新标记instance标签以匹配节点的主机名,因此我尝试使用这样的重新标记规则,无论如何都无效:

relabel_configs:
  - source_labels: ['nodename']
    target_label: 'instance'
Run Code Online (Sandbox Code Playgroud)

我可以手动重新标记每个目标,但是这需要将每个主机名硬编码到Prometheus中,这并不是很好。我看到节点导出器提供了node_uname_info包含主机名的度量,但是如何从中提取它呢?

node_uname_info{domainname="(none)",machine="x86_64",nodename="myhostname",release="4.13.0-32-generic",sysname="Linux",version="..."} 1
Run Code Online (Sandbox Code Playgroud)

prometheus

4
推荐指数
5
解决办法
6897
查看次数

yield 在理解式或生成器表达式中的应用是什么?

的Python 3.7的文档提到的是yield表达式弃用“在用于实现内涵和发电机表达的含蓄嵌套范围”,以去除3.8挂起:

由于它们对包含范围的副作用,yield 表达式不允许作为用于实现推导式和生成器表达式的隐式定义范围的一部分(在 Python 3.7 中,此类表达式在编译时会发出 DeprecationWarning,在 Python 3.8+ 中它们会发出 SyntaxError) .

我试图了解此更改会影响(中断?)什么,因为乍一看它解决了一个相当深奥的场景。首先yield在列表理解或生成器表达式中使用 a 是否有充分的理由?

到目前为止,我想出了这些(相当荒谬的)示例,它们在 Python 3.8 中应该是非法的:

>>> list((yield i) for i in range(5))
[0, None, 1, None, 2, None, 3, None, 4, None]
>>> list([(yield i) for i in range(5)])
[0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

python yield list-comprehension python-3.7

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

在哈姆雷特模板中使用紧凑的if-then-else

我试图了解Yesod的Hamlet中的变量插值,特别是实现if-then-else-like逻辑.假设我想根据整数的值添加CSS样式x.它x来自模板中的for循环,即我无法从Haskell代码访问它.

期望的结果:

<span class="even positive">2</span>
<span class="odd positive">13</span>
<span class="odd non-positive">-1</span>
<span class="even non-positive">0</span>
Run Code Online (Sandbox Code Playgroud)

尝试内联if:

<span class="#{if even x then "even" else "odd"} ...">#{x}</span>
Run Code Online (Sandbox Code Playgroud)

尝试使用$with:

$with cls <- (if even x then "even" else "odd")
    <span class="#{cls}">#{x}</span>
Run Code Online (Sandbox Code Playgroud)

都不起作用; 两者都导致了

• Illegal variable name: ‘if’
  When splicing a TH expression
Run Code Online (Sandbox Code Playgroud)

显然,Haskell语法的一部分未在#{...}解析器中实现.有干净的方法吗?我现在只能看到一条出路,它很丑陋地狱:

$if ((even x) && (x > 0))
    <span class="even positive">#{x}</span>
$elseif (even x)
    <span class="even non-positive">#{x}</span>
$elseif (x > 0) …
Run Code Online (Sandbox Code Playgroud)

haskell yesod hamlet shakespeare-text

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