小编The*_*ark的帖子

在PyInstaller中使用带有.spec的--onefile

我正在使用.spec文件使用PyInstaller"编译"程序.我正在使用.spec文件,因为我需要在程序中包含一个额外的文件.当我尝试这样做时PyInstaller --onefile Prog.spec,它仍然会将dist所有文件分开,而不是像我期望的那样制作单个文件.如果我这样做,PyInstaller --onefile Prog.py它确实会生成一个.exe文件dist,这就是我想要的.使用.spec文件时,我需要做些什么特别的事情吗?

python pyinstaller

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

使用假 mongoDB 进行 pytest 测试

我有连接到 MongoDB 客户端的代码,我正在尝试对其进行测试。为了测试,我不想连接到实际的客户端,所以我试图找出制作一个用于测试目的的假客户端。代码的基本流程是我在某处有一个函数来创建一个pymongo客户端,然后查询它并制作一个在其他地方使用的字典。

我想使用 pytest 编写一些测试来测试将调用get_stuff. 我的问题是get_stuff调用mongo()实际上是连接到数据库的原因。我试图只是使用pytest.fixture(autouse=True)mongomock.MongoClient()替换mongo().

但这并不能取代mongo_stuff.mongo(). 有什么方法可以告诉 pytest 替换一个函数,以便fixture调用我的函数而不是实际函数?我认为使fixture我的测试mongo()在命名空间中的优先级高于实际模块中的函数。

这是我的示例的示例文件结构:

.
??? project
?   ??? __init__.py
?   ??? mongo_stuff
?   ?   ??? __init__.py
?   ?   ??? mongo_stuff.py
?   ??? working_class
?       ??? __init__.py
?       ??? somewhere_else.py
??? testing
    ??? __init__.py
    ??? test_stuff.py
Run Code Online (Sandbox Code Playgroud)

mongo_stuff.py

import pymongo

def mongo():
    return pymongo.MongoClient(connection_params)

def get_stuff():
    db = mongo()  # Makes …
Run Code Online (Sandbox Code Playgroud)

python fixtures pytest pymongo mongomock

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

为什么Jupyter Notebook在制作更新图时会创建重复的图

我正试图在Jupyter笔记本中制作每秒钟更新一次的情节.现在,我只有一个简单的代码正在工作:

%matplotlib inline
import time
import pylab as plt
import numpy as np
from IPython import display

for i in range(10):
    plt.close()
    a = np.random.randint(100,size=100)
    b = np.random.randint(100,size=100)

    fig, ax = plt.subplots(2,1)
    ax[0].plot(a)
    ax[0].set_title('A')
    ax[1].plot(b)
    ax[1].set_title('B')

    display.clear_output(wait=True)
    display.display(plt.gcf())
    time.sleep(1.0)
Run Code Online (Sandbox Code Playgroud)

这更新了我每秒创建的图表.但是,最后,还有一个额外的图表副本:

在此输入图像描述

它为什么这样做?我怎么能让这件事发生呢?先感谢您.

python matplotlib ipython jupyter-notebook

6
推荐指数
2
解决办法
1282
查看次数

加粗一个像素线

我正在使用 OpenCV 在 Python 上进行一些图像处理。我正在尝试在轮廓由蒙版制成的图像上叠加轮廓。我正在使用cv2.Canny()获取蒙版的轮廓,然后使用cv2.cvtColor()将其更改为颜色,最后使用outline[np.where((outline == [255,255,255]).all(axis=2))] = [180,105,255]. 我现在的问题是这是一条 1 像素粗的线,在大图像上几乎看不到。本大纲的所有[0,0,0]除非我作为掩模运用我的彩色图像使用到分cv2.bitwise_or(img, outline

我目前正在通过蛮力和检查位图中的每个像素来加厚此轮廓,以检查其相邻像素是否为 [180,105,255],如果是,该像素也会发生变化。这是非常缓慢的。有没有办法使用 numpy 或 openCV 自动执行此操作?我希望用 numpy 进行一些条件索引,但找不到任何东西。

python opencv numpy image

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

使用角坐标收缩多边形

我试图弄清楚如何仅使用多边形的角坐标来缩小多边形。例如,如果我有以下带角[(0, 0), (0, 100), (20, 100), (30, 60), (40, 100), (60, 100), (60, 0), (40, 10), (40, 40), (20, 40), (20, 10)]的形状,则形状如下所示:

在此处输入图片说明

如果我将这个多边形缩小一些宽度和高度因子,我想找到角坐标。例如,如果我想将其宽度缩小 10%,将高度缩小 20%,那么这可以显示为如下所示:

在此处输入图片说明

我试图cv2.resize()通过调整大小后无法获得角落来做到这一点。我一直在尝试寻找一种用于调整多边形大小或缩小多边形大小的算法,但找不到有关如何执行此操作的任何信息。是否存在用于执行此类操作的任何算法或软件包?

python opencv

5
推荐指数
3
解决办法
3892
查看次数

从 docker 发送 ddtrace

我正在尝试学习如何使用 docker,但遇到了一些麻烦。我正在使用一个docker-compose.yaml文件来运行连接到 mysql 容器的 python 脚本,并且我正在尝试使用ddtrace它向 datadog 发送跟踪。我正在使用来自 datadog 的这个 github 页面中的以下图像

ddagent:
      image: datadog/docker-dd-agent
      environment:
          - DD_BIND_HOST=0.0.0.0
          - DD_API_KEY=invalid_key_but_this_is_fine
      ports:
          - "127.0.0.1:8126:8126"
Run Code Online (Sandbox Code Playgroud)

我的docker-compose.yaml样子

version: "3"
services:
    ddtrace-test:
        build: .
        volumes:
          - ".:/app"
        links:
          - ddagent

    ddagent:
          image: datadog/docker-dd-agent
          environment:
              - DD_BIND_HOST=0.0.0.0
              - DD_API_KEY=<my key>
          ports:
              - "127.0.0.1:8126:8126"
Run Code Online (Sandbox Code Playgroud)

那么我正在运行命令docker-compose run --rm ddtrace-test python test.pytest.py看起来像

from ddtrace import tracer

@tracer.wrap('test', 'test')
def foo():
    print('running foo')

foo()
Run Code Online (Sandbox Code Playgroud)

当我运行命令时,我返回

Starting service---reprocess_ddagent_1 …
Run Code Online (Sandbox Code Playgroud)

python docker datadog

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

从函数内部禁用`functools.lru_cache`

我想要一个可以使用的函数functools.lru_cache,但默认情况下不能使用。我正在寻找一种使用函数参数的方法,该参数可用于禁用lru_cache. 目前,我有两个版本的功能,一个有lru_cache一个没有。然后我有另一个函数,它用一个参数包装这些函数,该参数可用于控制使用哪个函数

def _no_cache(foo):
    print('_no_cache')
    return 1


@lru_cache()
def _with_cache(foo):
    print('_with_cache')
    return 0


def cache(foo, use_cache=False):
    if use_cache:
        return _with_cache(foo)
    return _no_cache(foo)
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法来做到这一点?

python functools python-decorators

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

在多处理池中保持 boto3 会话处于活动状态

我正在尝试删除 s3 中的很多文件。我计划使用 amultiprocessing.Pool来执行所有这些删除操作,但我不确定如何s3.client在作业之间保持活动状态。我想做类似的事情

import boto3
import multiprocessing as mp

def work(key):
    s3_client = boto3.client('s3')
    s3_client.delete_object(Bucket='bucket', Key=key)

with mp.Pool() as pool:
    pool.map(work, lazy_iterator_of_billion_keys)
Run Code Online (Sandbox Code Playgroud)

s3_client = boto3.client('s3')但这样做的问题是,在每项工作开始时都要花费大量时间。文档说要为每个进程创建一个新的资源实例,因此我需要一种方法为每个进程创建一个 s3 客户端。

有没有办法为池中的每个进程创建一个持久的 s3 客户端或缓存客户端?

另外,我计划通过发送批量密钥并使用 来优化删除s3_client.delete_objects,但s3_client.delete_object为了简单起见,在我的示例中进行了展示。

python multiprocessing boto3

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

列表理解以查找列表中每个数字的所有倍数小于数字

我正在尝试编写一个函数,该函数将查找列表中至少有一个数字的倍数的所有数字,其中倍数小于某个数字.这是我到目前为止所尝试的:

def MultiplesUnderX(MultArray,X):
    '''
    Finds all the multiples of each value in MultArray that
    are below X.
    MultArray: List of ints that multiples are needed of
    X: Int that multiples will go up to
    '''
    return [i if (i % x == 0 for x in MultArray) else 0 for i in range(X)]
Run Code Online (Sandbox Code Playgroud)

例如,MultiplesUnderX([2,3],10)将返回[2,3,4,6,8,9].我有点不确定如何使用列表理解中的for循环来完成此操作.

python list-comprehension

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

将列表插入到向量的末尾

有没有一种简单的方法可以将整个列表插入到矢量的末尾,而无需插入前值并将其弹出整个列表?现在,我正在做的事情:

std::vector<int> v({1,2,3});
std::list<int> l({5,7,9});
for (int i=0; i<3; i++) {
    v.push_back(l.front());
    l.pop_front();
}
Run Code Online (Sandbox Code Playgroud)

我希望通过某种方式轻松迭代列表并将其插入到矢量中.

c++ stl

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