小编ƘɌỈ*_*ƬƠƑ的帖子

在全球网站包中安装pip而不是virtualenv

使用pip在virtualenv中安装软件包会导致软件包安装在全局site-packages文件夹中,而不是virtualenv文件夹中的软件包.以下是我在OS X Mavericks(10.9.1)上设置Python3和virtualenv的方法:

我使用Homebrew安装了python3:

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
brew install python3 --with-brewed-openssl
Run Code Online (Sandbox Code Playgroud)

更改了pip3.bash_profile中的变量; 添加以下行:

export PATH=/usr/local/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

运行virtualenv返回$PATH(重启shell后).

注意:.bash_profile仍然会返回/ which python3.

使用pip3安装virtualenv:

pip3 install virtualenv
Run Code Online (Sandbox Code Playgroud)

接下来,创建一个新的virtualenv并激活它:

virtualenv testpy3 -p python3
cd testpy3
source bin/activate
Run Code Online (Sandbox Code Playgroud)

注意:如果我没有指定-p python3,那么virtualenv中的bin文件夹中将缺少pip.

运行/usr/local/bin/python3which python3返回virtualenv文件夹:

/Users/kristof/VirtualEnvs/testpy3/bin/pip3
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试在激活的virtualenv中使用pip安装例如Markdown时,pip将安装在全局site-packages文件夹中,而不是virtualenv的site-packages文件夹中.

pip install markdown
Run Code Online (Sandbox Code Playgroud)

运行usr/bin/python回报:

Markdown (2.3.1)
pip (1.4.1)
setuptools (2.0.1)
virtualenv (1.11)
Run Code Online (Sandbox Code Playgroud)

内容virtualenv:

__pycache__/
_markerlib/
easy_install.py
pip/
pip-1.5.dist-info/
pkg_resources.py
setuptools/
setuptools-2.0.2.dist-info/
Run Code Online (Sandbox Code Playgroud)

内容pip3 …

python macos pip virtualenv

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

Python中的多行日志记录

我正在使用Python 3.3.5和日志记录模块将信息记录到本地文件(来自不同的线程).在某些情况下,我想输出一些额外的信息,而不知道该信息究竟是什么(例如,它可能是一行文字或一个字典).

我想要做的是在写完日志记录后将这些附加信息添加到我的日志文件中.此外,仅当日志级别为错误(或更高)时才需要附加信息.

理想情况下,它看起来像:

2014-04-08 12:24:01 - INFO     - CPU load not exceeded
2014-04-08 12:24:26 - INFO     - Service is running
2014-04-08 12:24:34 - ERROR    - Could not find any active server processes
Additional information, might be several lines.
Dict structured information would be written as follows:
key1=value1
key2=value2
2014-04-08 12:25:16 - INFO     - Database is responding
Run Code Online (Sandbox Code Playgroud)

如果没有编写自定义日志格式化程序,我找不到符合我要求的内容.我已经阅读了有关过滤器和上下文的内容,但这似乎并不是一个很好的匹配.

或者,我可以使用标准I/O写入文件,但是大部分功能已经存在于Logging模块中,而且它是线程安全的.

任何投入将不胜感激.如果确实需要自定义日志格式化程序,那么任何关于从哪里开始的指针都会非常棒.

python logging python-3.x

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

Python Pandas数据框读取Excel工作表中的精确指定范围

我有很多不同的表(以及excel表中的其他非结构化数据).我需要在Excel表'数据'的'Sheet2'中创建一个超出范围'A3:D20'的数据帧.

我遇到的所有示例都向下钻取到工作表级别,但不是如何从精确范围中选择它.

import openpyxl
import pandas as pd

wb = openpyxl.load_workbook('data.xlsx')
sheet = wb.get_sheet_by_name('Sheet2')
range = ['A3':'D20']   #<-- how to specify this?
spots = pd.DataFrame(sheet.range) #what should be the exact syntax for this?

print (spots)
Run Code Online (Sandbox Code Playgroud)

一旦我得到这个,我计划在A列中查找数据并在B列中找到它的相应值.

编辑1:我意识到openpyxl需要太长时间,所以改为将其pandas.read_excel('data.xlsx','Sheet2')改为,至少在那个阶段它要快得多.

编辑2:目前,我已将我的数据放在一张表中,并且:

  • 删除所有其他信息
  • 添加了列名,
  • 应用index_col在我最左边的列上
  • 然后使用 wb.loc[]

python excel pandas

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

将Python SIGINT重置为默认信号处理程序

版本信息:

  • 操作系统:Windows 7
  • Python版本3.3.5

下面是我正在玩的一小段测试代码.目的是忽略CTRL-C在执行某些代码时被按下,之后CTRL-C行为将被恢复.

import signal 
import time

try:
    # marker 1
    print('No signal handler modifications yet')
    print('Sleeping...')
    time.sleep(10)

    # marker 2
    signal.signal(signal.SIGINT, signal.SIG_IGN)
    print('Now ignoring CTRL-C')
    print('Sleeping...')
    time.sleep(10)

    # marker 3
    print('Returning control to default signal handler')
    signal.signal(signal.SIGINT, signal.SIG_DFL)
    print('Sleeping...')
    time.sleep(10)

except KeyboardInterrupt:
    print('Ha, you pressed CTRL-C!')
Run Code Online (Sandbox Code Playgroud)

我在玩这个时就观察到了什么:

  • CTRL-C标记1标记2之间发送的将由异常处理程序处理(如预期的那样).
  • CTRL-C标记2标记3之间发送的内容将被忽略(仍然如预期)
  • CTRL-C处理标记3后发送但不会跳转到异常处理程序.相反,Python只是立即终止.

另外,考虑一下:

>>>import signal

>>>signal.getsignal(signal.SIGINT)
<built-in function default_int_handler> …
Run Code Online (Sandbox Code Playgroud)

python windows signals python-3.x

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

Python将日志滚动到变量

我有一个使用多线程的应用程序,并在后台运行在服务器上.为了在不必登录服务器的情况下监视应用程序,我决定包含Bottle以响应一些HTTP端点并报告状态,执行远程关闭等.

我还想添加一种方法来查阅日志文件.我可以使用FileHandler并在请求URL时发送目标文件(例如/log).

但是,我想知道是否可以实现像a这样的东西RotatingFileHandler,而不是记录到文件,记录到变量(例如BytesIO).这样,我可以将日志限制为最新信息,同时能够将其作为文本返回到浏览器,而不是单独的文件下载.

RotatingFileHandler需要的文件名,所以它不是一个选项,它传递一个BytesIO流.记录到变量本身是完全可行的(例如,在变量中捕获Python日志输出),但我对如何进行滚动部分感到有点困惑.

任何想法,提示,建议将不胜感激.

python logging python-3.x

10
推荐指数
2
解决办法
3140
查看次数

使用第一列作为索引,Excel到Pandas DataFrame

我在Excel中有一个非常简单的表,我正在尝试读入DataFrame

Excel数据

码:

from pandas import DataFrame, Series
import pandas as pd

df = pd.read_excel('params.xlsx', header=[0,1], index_col=None)
Run Code Online (Sandbox Code Playgroud)

这会产生以下DataFrame:

数据帧

我没想到param1.key会成为索引,特别是在设置之后index_col=None.有没有办法使用生成的索引而不是第一列的数据将数据导入DataFrame?

更新 - 这是您尝试reset_index()解决问题时会发生的情况:

reset_index()之后的DataFrame

版本信息:

  • Python 3.5.0
  • 大熊猫(0.17.1)
  • xlrd(0.9.4)

python pandas

9
推荐指数
2
解决办法
7658
查看次数

由于 ZScaler 和证书问题,无法使用 docker

我在 VMware Player 中运行了 VMware Photon OS。这将用作主机操作系统来运行 Docker 容器。

但是,由于我支持 ZScaler,因此我在运行访问外部资源的命令时遇到了问题。例如,docker pull python给了我以下输出(我添加了一些换行符以使其更具可读性):

error pulling image configuration: 
Get https://dseasb33srnrn.cloudfront.net/registry-v2/docker/registry/v2/blobs/sha256/a0/a0d32d529a0a6728f808050fd2baf9c12e24c852e5b0967ad245c006c3eea2ed/data
?Expires=1493287220
&Signature=gQ60zfNavWYavBzKK12qbqwfOH2ReXMVbWlS39oKNg0xQi-DZM68zPi22xfDl-8W56tQmz5WL5j8L39tjWkLJRNmKHwvwjsxaSNOkPMYQmhppIRD0OuVwfwHr-
1jvnk6mDZM7fCrChLCrF8Ds-2j-dq1XqhiNe5Sn8DYjFTpVWM_
&Key-Pair-Id=APKAJECH5M7VWIS5YZ6Q: 
x509: certificate signed by unknown authority
Run Code Online (Sandbox Code Playgroud)

我试图PEM从我的 Windows 工作站中提取ZScaler的 CA 根证书(格式),并将它们附加到/etc/pki/tls/certs/ca-bundle.crt. 但是即使在重新启动 Docker 之后,这也没有解决问题。

我已经阅读了许多帖子,其中大部分都引用了update-ca-trust我的系统上不存在的命令(即使ca-certificates安装了软件包)。

我不知道如何前进。AFAIK,有两种选择。任何一个:

  • 添加 ZScaler 证书,以便信任 SSL 连接。
  • 允许与 Docker 集线器的不安全连接(但即便如此,它可能仍会抱怨,因为证书不受信任)。

后者的工作方式是,例如curl使用该-k选项执行允许我访问任何 https 资源。

linux certificate docker photon-os zscaler

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

无法从 Python 中的线程调用 WMI

我正在尝试使用WMI库进行一些非常简单的查询:

  • 服务状态
  • 运行的进程数
  • 可用磁盘空间

到目前为止没问题,直到我开始介绍线程。

我的第一次尝试有一个类(规则)派生自threading.Thread并调用另一个执行 WMI 调用的类(检查)。

为了克服线程问题,我使用该pythoncom库在 WMI 查询的开始和结束时进行初始化和取消初始化。这是它的样子:

class Process(Check):

    def __init__(self, process_name, expected_instances=1):
        self.expected_instances = expected_instances
        self.process_name = process_name


    def run(self):
        import wmi, pythoncom
        pythoncom.CoInitialize()
        try:
            self.wmi_process = wmi.WMI().Win32_Process
            process_count = len(self.wmi_process(name=self.process_name))

            if process_count == self.expected_instances:
                return result.Success('Found {0} {1} processes'.format(process_count, self.process_name))
            else:
                return result.Failure('Found {0} {1} processes, expected {2}'.format(process_count, self.process_name, self.expected_instances))
        finally:
            pythoncom.CoUninitialize()
Run Code Online (Sandbox Code Playgroud)

这有效,但Win32 exception occurred releasing IUnknown在主进程退出时仍会导致错误。

我接受了this SO question中给出的建议,并将WMI查询移动到一个单独的类,该类将有一个实例传递给线程。

class WMIService:

    __lock = …
Run Code Online (Sandbox Code Playgroud)

wmi multithreading python-3.x

5
推荐指数
0
解决办法
1839
查看次数

找不到模块'cx_Freeze__init__'

我正在尝试将我的Python项目转换为独立的可执行文件,以便在未安装Python的其他服务器上运行它.

使用的命令:

python setup.py build > build.log
Run Code Online (Sandbox Code Playgroud)

当我尝试运行生成的exe时,它总是吐出以下错误消息:

zipimport.ZipImportError: can't find module 'cx_Freeze__init__'
Fatal Python error: unable to locate initialization module

Current thread 0x00000b8c (most recent call first):
Run Code Online (Sandbox Code Playgroud)

我试图在setup.py模块中的整个项目中定义我正在使用的所有库,尽管这没有任何区别.

我还添加了要包含的DLL文件(在帖子中描述cx-freeze没有找到所有依赖项).

该项目由以下库组成(输出pip list):

cx-Freeze (4.3.2)
docopt (0.6.1)
pip (1.5.4)
psutil (2.0.0)
pywin32 (218)
requests (2.2.1)
setuptools (2.2)
virtualenv (1.11.4)
WMI (1.4.9)
Run Code Online (Sandbox Code Playgroud)

内容setup.py:

include_files=[
           (r'C:\Python34\Lib\site-packages\pywin32_system32\pywintypes34.dll', 'pywintypes34.dll'),
           (r'C:\Python34\Lib\site-packages\pywin32_system32\pythoncom34.dll', 'pythoncom34.dll'),]

build_exe_options = dict(
    packages=['os', 'concurrent.futures', 'datetime', 'docopt', 'email.mime.text', 'configparser', 'enum',
              'json', 'logging', 'psutil', 'requests', 'smtplib', 'socket', …
Run Code Online (Sandbox Code Playgroud)

python windows cx-freeze python-3.x

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

用于 Pandoc 的表格布局

我正在尝试创建文档生成工作流程(专业文档)。目标是尽可能多地用 Markdown 编写。生成的文档应为 PDF,同时仍可在必要时导出为 .docx。

我已经决定使用 Pandoc,为此我将创建一个 Latex 模板并使用一个 YAML 文档来保存文档元数据。到现在为止还挺好。然而,有时我需要使用表格,从非常简单的表格到更复杂的布局,例如跨列。

除了最简单的表格之外,Markdown 几乎不能用于任何东西。我尝试用 HTML 来定义更复杂的表格布局,但 Pandoc 似乎不知道如何处理跨列或跨行。

如果没有完全在 Latex 中定义表格,是否还有其他替代方法可以使用易于维护的方法来定义表格,同时仍然能够使用 Pandoc 将它们转换为 Latex/PDF?

一个更复杂的表的例子(取自这里):

<body>
<table border="1">

<!-- First row -->

<tr>
<td>1</td>
<td colspan="2">2 and 3</td>
<td>4</td>
</tr>

<!-- Second row -->

<tr>
<td rowspan="3">5, 9 and 13</td>
<td>6</td>
<td>7</td>
<td>8</td>
</tr>

<!-- Third row -->

<tr>
<td>10</td>
<td>11</td>
<td>12</td>
</tr>

<!-- Fourth row -->

<tr>
<td colspan="3">14, 15 and 16</td>
</tr>

</table>
</body>
Run Code Online (Sandbox Code Playgroud)

这是 PDF 中的结果:

PDF结果

markdown latex pandoc

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