我有几个方法的特征。一些(但不是所有)实现此特征的结构都具有以下方法之一的所有相同实现:
trait Blabla {
fn xy(self, x: u32, y: u32) -> u32;
}
// ---------------------------------
struct Ding {}
impl Blabla for Ding {
fn xy(self, x: u32, y: u32) -> u32 {
x + y
}
}
// ---------------------------------
struct Dong {
dong_attribute: u32,
}
impl Dong {
fn get_1(self) -> u32 {
1
}
}
impl Blabla for Dong {
fn xy(self, x: u32, y: u32) -> u32 {
x + y + self.get_1()
}
}
// ---------------------------------
struct …Run Code Online (Sandbox Code Playgroud) 有没有什么方法可以让用户在使用时从 setup.py 中看到消息和/或警告pip?
我的包使用自定义安装命令。setup.py的结构如下:
from setuptools import setup
from setuptools.command.install import install
import warnings
import sys
class CustomInstallCommand(install):
def run(self):
install.run(self)
sys.stdout.write('My message.\n')
sys.stdout.flush()
warnings.warn('My warning.', UserWarning)
setup(name='blub',
version='0.1',
description='blah',
packages=['blub'],
cmdclass={'install': CustomInstallCommand})
Run Code Online (Sandbox Code Playgroud)
当我运行时python setup.py install,我在输出中看到自定义打印消息和警告。
但是,如果我运行pip install .,我只会得到这个:
C:\Users\ae\Software\SomeModule>pip install .
Processing c:\users\ae\software\somemodule
Building wheels for collected packages: blub
Building wheel for blub (setup.py) ... done
Created wheel for blub: filename=blub-0.1-cp37-none-any.whl size=1115 sha256=51c91c5b449673e3be5dd7382cd12f59cb38021167ba3a0b3634214419c61bcb
Stored in directory: C:\Users\ae\AppData\Local\Temp\pip-ephem-wheel-cache-575zecpf\wheels\81\5f\73\46e55517a1e0973939e9578945ff104b6e0193cfaed649e206
Successfully built blub
Installing collected packages: …Run Code Online (Sandbox Code Playgroud) 据我了解,通过轮子分发 Python 包的主要优点之一是我可以以编译形式包含扩展模块。然后,包的用户不需要具有允许编译源代码的系统。
现在我设法为我的包构建了一个轮子,其中包含一个 Fortran 扩展模块。我构建的计算机有 Windows7 64 和 Python 3.6。
为了让一切正常运行,我遵循了这个非常有用的指南(非常感谢 Michael Hirsch)。步骤之一是使用以下设置安装MinGW-64:架构:x86_64,线程:posix,异常:seh。
然后我从那个轮子在另一台测试机器(Win10 64,Python 3.6)上安装了 Python 包:
D:\dist2>pip install SMUTHI-0.2.0a0-cp36-cp36m-win_amd64.whl
Processing d:\dist2\smuthi-0.2.0a0-cp36-cp36m-win_amd64.whl
Requirement already satisfied: scipy in c:\programdata\anaconda3\lib\site-packages (from SMUTHI==0.2.0a0)
Requirement already satisfied: sympy in c:\programdata\anaconda3\lib\site-packages (from SMUTHI==0.2.0a0)
Requirement already satisfied: argparse in c:\programdata\anaconda3\lib\site-packages (from SMUTHI==0.2.0a0)
Requirement already satisfied: numpy in c:\programdata\anaconda3\lib\site-packages (from SMUTHI==0.2.0a0)
Requirement already satisfied: matplotlib in c:\programdata\anaconda3\lib\site-packages (from SMUTHI==0.2.0a0)
Requirement already satisfied: pyyaml in c:\programdata\anaconda3\lib\site-packages (from SMUTHI==0.2.0a0)
Requirement already satisfied: six>=1.10 …Run Code Online (Sandbox Code Playgroud) 我的问题涉及 PyQT5。我尝试创建一个带有按钮的对话框窗口,单击该按钮时
QTextEdit字段的一些文本像这样的东西:
class StartDialog(QtWidgets.QWidget, start_dialog_ui.Ui_Dialog):
def __init__(self, parent):
super(self.__class__, self).__init__()
self.setupUi(self)
self.OKButton.clicked.connect(self.start)
def start(self):
self.startDialogTextEdit.append("simulation running ...")
run_lengthy_function(self)
Run Code Online (Sandbox Code Playgroud)
然而,当我运行 GUI 时,我注意到文本仅在冗长的函数终止后QTextEdit.append才会更新,尽管是在冗长的函数之前调用的。如何强制提前更新文本?
到目前为止我尝试过的(但没有成功)是让Python在触发冗长的函数调用之前等待一段时间,即
from time import sleep
class StartDialog(QtWidgets.QWidget, start_dialog_ui.Ui_Dialog):
def __init__(self, parent):
super(self.__class__, self).__init__()
self.setupUi(self)
self.OKButton.clicked.connect(self.start)
def start(self):
self.startDialogTextEdit.append("simulation running ...")
sleep(5)
run_lengthy_function(self)
Run Code Online (Sandbox Code Playgroud)