小编Eli*_*red的帖子

让cURL与Visual Studio 2017一起使用

*编辑:我按照这些步骤在64位机器上使用CURL工作(请参阅下面的原始问题):

首先安装vcpkg:

  1. 使用gitbash 克隆vcpkgC:\Program Files
  2. 在命令提示符中导航到 C:\Program Files\vcpkg
  3. 在命令提示符下运行: .\bootstrap-vcpkg.bat
  4. 在命令提示符下运行: vcpkg integrate install

然后使用vcpkg和Visual Studios 2017命令提示符安装cURL:

  1. 打开a VS 2017 Command prompt并导航到vcpkg文件夹(其中vcpkg.exe)
  2. 运行:( vcpkg install curl[*]:x64-windows注意这可能需要大约半小时才能下载并运行,如果它看起来像是"卡在"部件,请不要担心).

    *编辑:以前我的指示说要运行vcpkg install curl:x64-windows但我[*]在@ i7clock的要求下添加了启用sftp和scp协议.

  3. 完成此步骤后,应检查以确保正确安装卷曲.为此,您应该在VS 2017中创建一个新项目,并尝试包含#include curl/curl.h而不添加任何其他包含目录.如果你不能这样做,那么你的curl安装出了问题.您应该删除curl(甚至可能是vcpkg文件夹并执行全新安装),直到您可以包含curl/curl.h.

    *编辑:这只有在x64中使用x64调试器/编译时才有效!如果您不能包含curl目录检查以确保您的调试设置为正确的Windows版本.

您可能还需要禁用SSL对等验证:

  1. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);在请求之前放置代码(见下文).请注意,这只是必要的,因为我无法弄清楚如何使用卷曲来使用证书.我有一个关于这个问题的AS-的,但没有答案计算器后这里.

以下是您可能需要尝试运行的其他一些步骤,但我最终发现它们没有必要:

  1. 导航到vcpkg\packages\curl_x64-windows\lib以查找libcurl.lib文件.
  2. 在Properties - > Linker下的Additional Library Directories中包含libcurl.lib的路径
  3. 在Linker - > Input - > Additional Dependencies下的附加依赖项中包含libcurl.lib
  4. 放置CURL_STATICLIB在属性 - > C/C++ - >预处理器 - …

c++ linker curl visual-studio-2017 vcpkg

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

模拟方法调用Python

我一直在搜索堆栈交换和网络上如何做到这一点,但我无法理解如何模拟方法的行为.我正在尝试为自定义类模拟openpyxl行为和行为.这是我的尝试:

import unittest
from unittest.mock import MagicMock
import openpyxl 
from MyPythonFile import MyClass

class TestMyClass(unittest.TestCase):
  def test_myclass(self):
    myclass = MyClass()
    wb = openpyxl.workbook()
    ws = openpyxl.worksheet()
    wbPath = 'wbPath'

    openpyxl.load_workbook(wbPath, data_only = True) = MagicMock(return_value=wb)
Run Code Online (Sandbox Code Playgroud)

当我尝试最后一行时,我收到错误"无法分配给函数调用".我需要使用patch.object('openpyxl','load_workbook')吗?我习惯用Groovy在Java中进行模拟,而且非常简单.

*编辑:想要根据@alxwrd的响应添加测试的最终版本

import unittest
from unittest.mock import MagicMock
import openpyxl 
import configparser
from MyPythonFile import MyClass

class TestMyClass(unittest.TestCase):
  def test_myclass(self):
    myclass = MyClass()
    wb = openpyxl.workbook()
    ws = openpyxl.worksheet()
    config = configparser.ConfigParser()

    openpyxl.load_workbook = MagicMock(return_value=wb)
    wb.get_sheet_by_name = MagicMock(return_value=ws)

    config.sections() = MagicMock(return_value=['Section1'])
    config.get = …
Run Code Online (Sandbox Code Playgroud)

python methods unit-testing mocking configparser

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

模拟属性调用返回 MagicMock,而不是值

我有以下配置类:

class ConfigB(object):
  Id = None

  def __Init__(self, Id):
    self.Id = Id
Run Code Online (Sandbox Code Playgroud)

在以下类中实例化并打印属性:

from config.ConfigB import ConfigB

class FileRunner(object):
  def runProcess(self, Id)
    cfgB = ConfigB(Id)
    print(cfgB.Id)
Run Code Online (Sandbox Code Playgroud)

我创建了以下测试类来测试它,我试图在其中模拟实例化和 cfgB.Id 属性调用:

import unittest
import unittest.mock imort MagicMock
import mock
from FileRunner import FileRunner

class TestFileRunner(unittest.TestCase):
  @mock.patch('ConfigB.ConfigB.__init__')
  @mock.patch('ConfigB.ConfigB.Id')
  def test_methodscalled(self, cfgBId, cfgBInit):


    fileRunner = FileRunner()

    cfgBId.return_value = 17

    cfgBInit.return_value = None

    print(cfgBId)

    fileRunner.runProcess(1)
Run Code Online (Sandbox Code Playgroud)

注意在调用 fileRunner 之前的 print(cfgBId) 语句。我得到以下输出:

<MagicMock name='Id' id='157297352'>
<MagicMock name='Id' id='157297352'>
Run Code Online (Sandbox Code Playgroud)

出于某种原因,当我在测试类中设置返回值时:

cfgBId.return_value = 17
Run Code Online (Sandbox Code Playgroud)

这不会在 FileRunner() 类中被调用:

print(cfgB.Id)
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能正确显示我的配置属性? …

python unit-testing properties mocking

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

从 Python 中的子目录运行所有测试

我试图让我所有的单元测试在 Python 中运行,我的智慧结束了。我搜索了大约 30 个不同的帖子和单元测试文档,但仍然无法弄清楚。

首先,我有两个测试类,我可以单独运行每个类,并且所有测试都通过:

文件:unittest.subfolder1.TestObject1.py

class TestObject1(unittest.TestCase):
  def test_case1(self):
    ...some code...
    ...some assertions...

if __name__ == '__main__':
  unittest.main()
Run Code Online (Sandbox Code Playgroud)

文件:unittest.subfolder2.TestObject2.py

class TestObject2(unittest.TestCase):
  def test_case1(self):
    ...some code...
    ...some assertions...

if __name__ == '__main__':
  unittest.main()
Run Code Online (Sandbox Code Playgroud)

从“unittest”上方的顶级目录开始,我试图让我们unittest.discover找到并运行我的所有测试:

import unittest

loader = unittest.TestLoader()
suite = loader.discover('unittest')
unittest.TextTestRunner().run(suite)
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我收到错误 `ModuleNotFoundError: No module named 'subfolder1.TestObject1'

我究竟做错了什么?

python unit-testing discover subdirectory

6
推荐指数
3
解决办法
8368
查看次数

模拟的os.listdir补丁不适用于单元测试

嘿所有我所以我有一个类方法,我试图测试,需要两个修补方法,'ConfigB.init '和'listdir':

from os import listdir
from config.ConfigB import ConfigB

class FileRunner(object):
  def runProcess(self, cfgA)
    cfgB = ConfigB(cfgA)
    print(listdir())
Run Code Online (Sandbox Code Playgroud)

我有以下测试设置:

import unittest
import unittest.mock imort MagicMock
import mock
from FileRunner import FileRunner

class TestFileRunner(unittest.TestCase):
  @mock.patch('ConfigB.ConfigB.__init__')
  @mock.patch('os.listdir')
  def test_methodscalled(self, osListDir, cfgB):

    cfgA = MagicMock()
    fileRunner = FileRunner()

    cfgB.return_value = None
    osListDir.return_value = None

    fileRunner.runProcess(cfgA)
Run Code Online (Sandbox Code Playgroud)

现在,修补的模拟和返回值适用于'ConfigB.ConfigB',但它不适用于'os.listdir'.当print(listdir())方法运行时,我得到当前目录中的文件列表,而不是我在修补返回值中指定的值"无".什么出了什么问题?

python unit-testing patch mocking

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

Openpyxl无法正确删除已创建工作簿中的工作表

所以我遇到了remove_sheet()与openpxyl 的问题,我无法找到答案.当我运行以下代码时:

import openpyxl

wb = openpyxl.Workbook()
ws = wb.create_sheet("Sheet2")
wb.get_sheet_names()
['Sheet','Sheet2']
wb.remove_sheet('Sheet')     
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ValueError: list.remove(x): x not in list
Run Code Online (Sandbox Code Playgroud)

它不起作用,即使我尝试wb.remove_sheet(0)wb.remove_sheet(1),我得到相同的错误.有什么我想念的吗?

python openpyxl

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

使用 S3 boto3 和雪花连接器时的 ContextualVersionConflict

boto3我正在尝试使用snowflake-connector-python以下包连接到 Amazon S3 :

boto3==1.14.8
botocore==1.17.8
snowflake-connector-python==2.2.7
snowflake-sqlalchemy==1.2.3
Run Code Online (Sandbox Code Playgroud)

我通过以下方式创建 s3 连接:

import boto3
import pandas as pd
import io

def retrieveCSV():
    session = boto3.Session(
        aws_access_key_id = [ACCESSKEY],
        aws_secret_access_key = [SECRETKEY],
        )

    s3 = session.resource('s3')
    obj = s3.Object('mybucket','MyData.csv')
    body = obj.get()['Body'].read()
    dfCSV = pd.read_csv(io.BytesIO(body),header=2)
    print(dfCSV)

    return dfCSV
Run Code Online (Sandbox Code Playgroud)

我使用以下方式连接到 Snowflake:

from sqlalchemy import create_engine

def createEngine(schema):
    strConn = 'snowflake://{user}:{password}@{account}/{database}/{schema}'.format(
                        user = [MYUSER],
                        password = [MYPASSWORD],
                        account = [MYSERVER],
                        database = [MYDATABASE],
                        schema = [MYSCHEMA]
                        )
    print(strConn)

    engine = create_engine(strConn) …
Run Code Online (Sandbox Code Playgroud)

pip amazon-s3 python-3.x boto3 snowflake-cloud-data-platform

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

使用 XLWings 进行并行处理

所以我对并行处理很陌生,但我开始让它同时解析多个 Excel 文件。当我只使用 openpyxl 时它工作得很好,但据我所知,这是一个基本的 XML 解析器。当我包含使用 XLWings 的部分时(我喜欢利用它在 Excel 中评估方程的能力来进行文件验证),我收到以下错误:

pywintypes.com_error: (-2147221008, 'CoInitialize has not been called.', None, None)
Run Code Online (Sandbox Code Playgroud)

这大致是我用来初始化新的 XLWings 实例并加载工作簿的代码:

def openWorkbook(self, filePath):
    app = xw.apps.add()
    app.display_alerts = False
    app.screen_updating = False
    wb = self.app.books(filePath) #Note that this is called only once for each workbook.
    app.screen_updating = True
    app.quit()
Run Code Online (Sandbox Code Playgroud)

有没有办法让 XLWings 同时打开多个 Excel 实例?我应该尝试做这样的事情吗?如果是这样,我不确定初始化如何将线程交给 XLWings。

python parallel-processing xlwings

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

LISP从函数中返回值的适当方法

因此,我正在通过Paul Graham的Common Lisp工作,并且有一个问题要求创建一个union函数,该函数维护列表中元素的组合顺序.为此,我写了以下函数:

(defun new-union (listA listB)
  (setq retset (list (car listA)))
  (loop for el in (append (cdr listA) listB)
    do (if (not(member el retset))
      (push el (cdr (last retset)))))
  (return-from new-union retset))
Run Code Online (Sandbox Code Playgroud)

这将返回每个列表的唯一元素,同时保持顺序,因此如果我创建并运行:

(setq listA '(a b c a))
(setq listB '(c d e))
(new-union listA listB)
Run Code Online (Sandbox Code Playgroud)

回报是:

(A B C D E)
Run Code Online (Sandbox Code Playgroud)

所以第一件事是我得到一个编译器警告:"undefined variable: RETSET"在这一行:(setq retset (list (car listA))).另一件事是上面的方法似乎是一种更"面向对象"的做事方式而不是LISP方式的return-from陈述.

是否可以在没有编译器错误的情况下以更"适合"的方式编写此代码?

*编辑:使用@Sylwester的答案我已经重写了如下函数并且没有错误:

(defun new-union (listA listB)
 (let ((retset (list (car listA))))
   (loop for …
Run Code Online (Sandbox Code Playgroud)

functional-programming sbcl common-lisp

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