這個問題的答案可能有點複雜。如果你經常使用「命令提示字元」執行程式,那這對你來說不會是什麼難事。如果不然,那就需要更仔細的說明了。

除非你在使用某种集成开发环境,否则你将会在被称为“DOS 窗口”或“命令提示符窗口”的地方 输入 Windows 命令。 通常你可以在搜索栏搜索 cmd 来创建这种窗口。 你应该能够识别你何时打开了这样的窗口,因为你将看到一个 Windows“命令提示符”,通常看起来是这样:

C:\>

前面的字母可能会不同,而且后面有可能会有其他东西,所以你也许会看到类似这样的东西:

D:\YourName\Projects\Python>

出现的内容具体取决与你的电脑如何设置和最近用它做的事。 当你启动了这样一个窗口后,就可以开始运行Python程序了。

Python 脚本需要被另外一个叫做 Python 解释器 的程序来处理。 解释器读取脚本,把它编译成字节码,然后执行字节码来运行你的程序。 所以怎样安排解释器来处理你的 Python 脚本呢?

首先,确保命令窗口能够将“py”识别为指令来开启解释器。 如果你打开过一个命令窗口, 尝试输入命令 py 然后按回车:

C:\Users\YourName> py

然后你应当看见类似类似这样的东西:

Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32

Type "help", "copyright", "credits" or "license" for more information.

>>>

解释器已经以“交互模式”打开。这意味着你可以交互输入Python语句或表达式,并在等待时执行或评估它们。这是Python最强大的功能之一。输入几个表达式并看看结果:

>>>print("Hello")

Hello

>>>"Hello" * 3

'HelloHelloHello'

许多人把交互模式当作方便和高度可编程的计算器。 想结束交互式Python会话时,调用 exit() 函数,或者按住 Ctrl 键时输入 Z ,之后按 Enter 键返回Windows命令提示符。

你可能发现在开始菜单有这样一个条目 开始 ‣ 所有程序 ‣ Python 3.x ‣ Python (命令行), 运行它后会出现一个有着 >>> 提示的新窗口。 在此之后,如果调用 exit() 函数或按 Ctrl-Z 组合键后窗口将会消失。 Windows 会在这个窗口中运行一个“python”命令,并且在你终止解释器的时候关闭它。

现在我们知道 py 命令已经被识别,可以输入 Python 脚本了。 你需要提供 Python 脚本的绝对路径或相对路径。 假设 Python 脚本位于桌面上并命名为 hello.py,并且命令提示符在用户主目录打开,那么可以看到类似于这样的东西:

C:\Users\YourName>

那么现在可以让 py 命令执行你的脚本,只需要输入 py 和脚本路径:

C:\Users\YourName> py Desktop\hello.py

hello

在 Windows 上,标准 Python 安装程序已将 .py 扩展名与文件类型 (Python.File) 相关联,并为该文件类型提供运行解释器的打开命令 (D:\Program Files\Python\python.exe "%1" %*) 。 这足以使脚本在命令提示符下作为“foo.py”命令被执行。 如果希望通过简单地键入“foo”而无需输入文件扩展名来执行脚本,则需要将 .py 添加到 PATHEXT 环境变量中。

通常,Python 在 Windows 上启动得很快,但偶尔会有错误报告说 Python 突然需要很长时间才能启动。更令人费解的是,在其他配置相同的 Windows 系统上,Python 却可以工作得很好。

该问题可能是由于计算机上的杀毒软件配置错误造成的。当将病毒扫描配置为监视文件系统中所有读取行为时,一些杀毒扫描程序会导致两个数量级的启动开销。请检查你系统安装的杀毒扫描程序的配置,确保两台机它们是同样的配置。已知的, McAfee 杀毒软件在将它设置为扫描所有文件系统访问时,会产生这个问题。

See http://cx-freeze.sourceforge.net/ for a distutils extension that allows you

to create console and GUI executables from Python code.

py2exe, the most popular extension for building

Python 2.x-based executables, does not yet support Python 3 but a version that

does is in development.

是的, .pyd 文件也是 dll ,但有一些差异。如果你有一个名为 foo.pyd 的DLL,那么它必须有一个函数 PyInit_foo() 。 然后你可以编写 Python 代码 “import foo” ,Python 将搜索 foo.pyd (以及 foo.py 、 foo.pyc )。如果找到它,将尝试调用 PyInit_foo() 来初始化它。你不应将 .exe 与 foo.lib 链接,因为这会导致 Windows 要求存在 DLL 。

请注意, foo.pyd 的搜索路径是 PYTHONPATH ,与 Windows 用于搜索 foo.dll 的路径不同。此外, foo.pyd 不需要存在来运行你的程序,而如果你将程序与 dll 链接,则需要 dll 。 当然,如果你想 import foo ,则需要 foo.pyd 。在 DLL 中,链接在源代码中用 __declspec(dllexport) 声明。 在 .pyd 中,链接在可用函数列表中定义。

在 Windows 应用程序中嵌入 Python 解释器可以总结如下:

请 _不要_ 直接在你的 .exe 文件中内置 Python 。在 Windows 上, Python 必须是一个 DLL ,这样才可以处理导入的本身就是 DLL 的模块。(这是第一个未记录的关键事实。)相反,链接到 pythonNN.dll ;它通常安装在 C:\Windows\System 中。 NN 是 Python 版本,如数字“33”代表 Python 3.3 。

你可以通过两种不同的方式链接到 Python 。加载时链接意味着链接到 pythonNN.lib ,而运行时链接意味着链接 pythonNN.dll 。(一般说明: python NN.lib 是所谓的“import lib”,对应于 pythonNN.dll 。它只定义了链接器的符号。)

运行时链接极大地简化了链接选项,一切都在运行时发生。你的代码必须使用 Windows 的 LoadLibraryEx() 程序加载 pythonNN.dll 。代码还必须使用使用 Windows 的 GetProcAddress() 例程获得的指针访问 pythonNN.dll 中程序和数据(即 Python 的 C API )。宏可以使这些指针对任何调用 Python C API 中的例程的 C 代码都是透明的。

Borland 提示:首先使用 Coff2Omf.exe 将 pythonNN.lib 转换为 OMF 格式。

如果你使用 SWIG ,很容易创建一个 Python “扩展模块”,它将使应用程序的数据和方法可供 Python 使用。SWIG将为你处理所有蹩脚的细节。结果是你将链接到 .exe 文件 中 的C代码 (!) 你不必创建 DLL 文件,这也简化了链接。

SWIG 将创建一个 init 函数(一个 C 函数),其名称取决于扩展模块的名称。例如,如果模块的名称是 leo ,则 init 函数将被称为 initleo() 。 如果您使用 SWIG 阴影类,则 init 函数将被称为 initleoc() 。这初始化了一个由阴影类使用的隐藏辅助类。

你可以将步骤 2 中的 C 代码链接到 .exe 文件的原因是调用初始化函数等同于将模块导入 Python ! (这是第二个关键的未记载事实。)

简而言之,你可以用以下代码使用扩展模块初始化 Python 解释器。

#include "python.h"

...

Py_Initialize(); // Initialize Python.

initmyAppc(); // Initialize (import) the helper class.

PyRun_SimpleString("import myApp"); // Import the shadow class.

Python C API 存在两个问题,如果你使用除 MSVC 之外的编译器用于构建 python.dll ,这将会变得明显。

问题1:采用 FILE* 参数的所谓“极高级”函数在多编译器环境中不起作用,因为每个编译器的FILE结构体概念都不同。从实现的角度来看,这些是非常 _低_ 级的功能。

问题2:在为 void 函数生成包装器时,SWIG 会生成以下代码:

Py_INCREF(Py_None);

_resultobj = Py_None;

return _resultobj;

Py_None 是一个宏,它扩展为对 pythonNN.dll 中名为 _Py_NoneStruct 的复杂数据结构的引用。同样,此代码将在多编译器环境中失败。将此类代码替换为:

return Py_BuildValue("");

有可能使用 SWIG 的 %typemap 命令自动进行更改,但我无法使其工作(我是一个完全的SWIG新手)。

使用 Python shell 脚本从 Windows 应用程序内部建立 Python 解释器窗口并不是一个好主意;生成的窗口将独立于应用程序的窗口系统。相反,你(或 wxPythonWindow 类)应该创建一个“本机”解释器窗口。将该窗口连接到Python解释器很容易。你可以将 Python的 i/o 重定向到支持读写的 _任意_ 对象,因此你只需要一个包含 read() 和 write() 方法的 Python 对象(在扩展模块中定义)。

本 FAQ 不建议使用制表符, Python 样式指南 PEP 8 ,为发行的 Python 代码推荐 4 个空格;这也是 Emacs python-mode 默认值。

在任何编辑器下,混合制表符和空格都是一个坏主意。 MSVC 在这方面没有什么不同,并且很容易配置为使用空格: 点击 Tools ‣ Options ‣ Tabs,对于文件类型“Default”,设置“Tab size”和“Indent size”为 4 ,并选择“插入空格”单选按钮。

如果混合制表符和空格导致前导空格出现问题, Python 会引发 IndentationError 或 TabError 。你还可以运行 tabnanny 模块以批处理模式检查目录树。

使用 msvcrt 模块。 是标准的 Windows 特定扩展模块。它定义了一个函数 kbhit() 来检查是否存在键盘命中,而 getch() 来获取一个字符而不回显它。

wxpython下载很慢_FAQ:在 Windows 使用 Python相关推荐

  1. WXpython下载很慢安装包教程,直接安装不上,只好把所有包下载下来

    首先确定好自己的python支持哪些版本的whl文件 链接:https://pan.baidu.com/s/1jlLKQWH3D-YTUcohi6F0dA?pwd=abc1  提取码:abc1  内含 ...

  2. wxpython下载很慢_为什么WxPythons运动检测速度如此之慢?

    我设置on_motion来处理EVT_MOTION.我希望鼠标位置以交互方式生成特定于坐标的图像,但是Wx Python在注册连续的运动事件时有大约400ms的延迟.这使界面变得迟钝. 为什么EVT_ ...

  3. wxpython下载安装过程

    wxPython介绍 1.wxPython是Python语言的一套优秀的GUI图形库.wxPython可以很方便的创建完整的.功能键全的GUI用户界面. wxPython是作为优秀的跨平台GUI库wx ...

  4. linux系统手柄模拟器下载,Switch Amiibo模拟器(Windows|Linux PC + JoyControl + Bluetooth)...

    之前我发了一篇文章,介绍如何用安卓手机模拟switch的pro手柄刷amiibo,大家如果感兴趣可以点击我的那篇文章:蓝牙5.0安卓手机连接switch刷任意amiibo,不用白卡.但是如果你没有蓝牙 ...

  5. 爬虫bing的图片,近千张,下载后自动更换为windows壁纸

    爬虫bing的图片,下载后自动更换为windows壁纸 由于百度的广告太多了,就用了一段时间bing.com搜索,发现每次打开背景大图都很漂亮,而且每次切换,于是就想把它下载下来,作为桌面背景,也是很 ...

  6. mysql 8.0.22_最新版MySQL 8.0.22下载安装超详细教程(Windows 64位)

    前言 前几天下载安装了最新版的MySQL 8.0.22,遇到了不少问题,参考了一些方法,最终得以解决.今天将自己的安装过程记录下来,希望对各位有所帮助. 一.MySQL 8.0.22官网下载 点击进入 ...

  7. sql server 2008 r2卸载重装_免费下载:Intouch软件、Windows操作系统、SQL数据库,VB6.0、C#...

    为大家整理了常用的Windows操作系统和安装软件,基本上都是经过我们项目测试OK的版本,以后项目调试就齐全了,不用再"东奔西走","小鹿乱撞"了.整理不易,若 ...

  8. YDOOK:putty: 最新版 putty 下载安装完整教程,windows怎么下载安装 putty?

    YDOOK:putty: 最新版 putty 下载安装完整教程,windows怎么下载安装 putty? 1. 搜索或者直接点击进入 putty 的官网: putty 的官网 2. 第二行即显示最新版 ...

  9. C# net6微服务架构之服务注册与发现工具Consul的下载与安装(for windows)

    C# net6微服务架构之服务注册与发现工具Consul的下载与安装(for windows) 0.背景 1.Consul简介 2.Consul的主要功能 3.Consul下载与安装 4.Consul ...

最新文章

  1. R语言str_trim函数去除字符串中头部和尾部的空格
  2. 标准情况下的最优方案与魔鬼赛道
  3. Zend Framework数据库操作(1)
  4. .NET Core WEB API中接口参数的模型绑定的理解
  5. LeetCode 1771. 由子序列构造的最长回文串的长度(最长回文子序)
  6. scala 线性回归_Scala的特征线性化
  7. [Apple开发者帐户帮助]二、管理你的团队(3)删除团队成员
  8. ftk学习记(waitbox篇)
  9. matlab排序excel数据库,matlab对excel数据进行排序求和
  10. 【2G模组Air202开发】使用LuatTools下载Luat底层Lod及编写第一个程序:流水灯
  11. macbook历代_你都见过吗?苹果Mac历代台式机回忆录
  12. umail for linux,U-Mail邮件系统 for CentOS(6.X) x64
  13. 找工作必做事项-剑指offer
  14. strcpy会覆盖原来的吗_你真的会拍合影照吗?原来高大上的合影照这样拍
  15. 使用python制作爬虫_使用Python的urllib和urllib2模块制作爬虫的实例教程
  16. 笑对人生,坐看云起云落
  17. csr_matrix详细解读
  18. convs在MATLAB中,matlab2_MATELAB课程设计_ppt_大学课件预览_高等教育资讯网
  19. 国外有什么好的网站推荐?
  20. Bootstrap4 徽章(Badges)

热门文章

  1. java调用mq发送文件_谁有mq发送接收文件的java代码
  2. jquery 加载显示loading图标_王者荣耀100强什么意思?loading界面左上角100强有什么含义...
  3. uniapp对象怎么获取值_原理 | 怎么获取PMSM电机转子位置Offset值
  4. Linux开机启动过程(16):start_kernel()->rest_init()启动成功
  5. 类UNIX操作系统家族发展时间线图谱(1969-2020)
  6. java程序报错后跳过继续执行_java笔记.基础篇.基本数据类型
  7. python开启新代码块_20课零基础快速学python完成简单邮件完整邮件代码块
  8. 电脑更新重启后黑屏_手机黑屏了,重启后万事大吉?那可就错了!
  9. Hadoop之深入HDFS原理<一>
  10. VUE3(setup响应式函数系统API)