*编辑:我按照这些步骤在64位机器上使用CURL工作(请参阅下面的原始问题):
首先安装vcpkg:
C:\Program FilesC:\Program Files\vcpkg.\bootstrap-vcpkg.batvcpkg integrate install然后使用vcpkg和Visual Studios 2017命令提示符安装cURL:
VS 2017 Command prompt并导航到vcpkg文件夹(其中vcpkg.exe)运行:( vcpkg install curl[*]:x64-windows注意这可能需要大约半小时才能下载并运行,如果它看起来像是"卡在"部件,请不要担心).
*编辑:以前我的指示说要运行vcpkg install curl:x64-windows但我[*]在@ i7clock的要求下添加了启用sftp和scp协议.
完成此步骤后,应检查以确保正确安装卷曲.为此,您应该在VS 2017中创建一个新项目,并尝试包含#include curl/curl.h而不添加任何其他包含目录.如果你不能这样做,那么你的curl安装出了问题.您应该删除curl(甚至可能是vcpkg文件夹并执行全新安装),直到您可以包含curl/curl.h.
*编辑:这只有在x64中使用x64调试器/编译时才有效!如果您不能包含curl目录检查以确保您的调试设置为正确的Windows版本.
您可能还需要禁用SSL对等验证:
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);在请求之前放置代码(见下文).请注意,这只是必要的,因为我无法弄清楚如何使用卷曲来使用证书.我有一个关于这个问题的AS-的,但没有答案计算器后这里.以下是您可能需要尝试运行的其他一些步骤,但我最终发现它们没有必要:
CURL_STATICLIB在属性 - > C/C++ - >预处理器 - …我一直在搜索堆栈交换和网络上如何做到这一点,但我无法理解如何模拟方法的行为.我正在尝试为自定义类模拟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) 我有以下配置类:
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 中运行,我的智慧结束了。我搜索了大约 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'
我究竟做错了什么?
嘿所有我所以我有一个类方法,我试图测试,需要两个修补方法,'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())方法运行时,我得到当前目录中的文件列表,而不是我在修补返回值中指定的值"无".什么出了什么问题?
所以我遇到了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),我得到相同的错误.有什么我想念的吗?
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
所以我对并行处理很陌生,但我开始让它同时解析多个 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。
因此,我正在通过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) python ×6
unit-testing ×4
mocking ×3
amazon-s3 ×1
boto3 ×1
c++ ×1
common-lisp ×1
configparser ×1
curl ×1
discover ×1
linker ×1
methods ×1
openpyxl ×1
patch ×1
pip ×1
properties ×1
python-3.x ×1
sbcl ×1
snowflake-cloud-data-platform ×1
subdirectory ×1
vcpkg ×1
xlwings ×1