版本共存
手工配置
在安装Python3(>=3.3)时,Python的安装包实际上在系统中安装了一个启动器py.exe,默认放置在文件夹C:\Windows\下面。这个启动器允许我们指定使用Python2还是Python3来运行代码(当然前提是你已经成功安装了Python2和Python3)。
运行代码:
1 2
| py -2 hello.py #python2 py -3 hello.py #python3
|
如果你觉得参数 -2/-3 麻烦,由于 py.exe 这个启动器允许你在代码里面加入说明,指示这个文件是用python2还是3版本运行,可以在代码文件最前面加入一行说明
python2版本(编码说明可以放在第二行)
python3版本
这样就可以直接运行
当2和3同时存在Windows上时,他们对应的pip都叫pip.exe,所以不能直接使用 pip install 命令安装软件包,而是依靠py.exe来指定pip版本。
1 2
| py -2 -m pip install ***** py -3 -m pip install *****
|
按照环境变量的前后,如以 python 2 为 优先:
设置环境变量PATH为:
1
| C:\Python27;C:\Python27\Scripts;C:\Python36\Scripts\;C:\Python36\;
|
Pyenv
pyenv是一个forked自ruby社区的简单、低调、遵循UNIX哲学的Python环境管理工具,用于安装和管理多个Python版本。它使开发人员能够快速访问更新版本的Python,并保持系统干净,避免不必要的包膨胀。它还提供了从 Python 的一个版本快速切换到另一个版本的能力,以及指定给定项目使用的Python版本并可以自动切换到该版本, 同时结合vitualenv插件可以方便的管理对应的包源
github:
https://github.com/pyenv/pyenv
https://github.com/pyenv-win/pyenv-win
linux
安装依赖
1
| apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
|
clone存储库
1
| git clone https://github.com/pyenv/pyenv.git ~/.pyenv
|
配置环境
1 2 3 4 5 6
| # 设置一些重要的环境变量并设置 pyenv 自动完成 echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc # 重新启动 shell exec "$SHELL"
|
验证安装
1 2 3 4 5 6 7 8 9
| # 列出可用的 Python 版本 pyenv install --list # 安装python版本(Pyenv从源代码构建,时间较长) pyenv install 3.8.10 # 验证Python版本是否已安装 pyenv versions # 将Python的版本更改为 3.8.10并放入 python shell pyenv global 3.8.10 python
|
命令
参阅 pyenv help <command>
- –version :: 显示 pyenv命令的版本列出所有可用的 pyenv 命令
- exec :: 使用选定的 Python 版本运行可执行文件
- global :: 设置或显示全局 Python 版本
- help :: 显示命令的帮助
- hooks :: 列出给定 pyenv 命令的钩子脚本
- init :: 配置pyenv的shell环境
- install :: 使用 python-build 安装 Python 版本
- local :: 设置或显示本地应用程序特定的 Python 版本
- prefix :: 显示 Python 版本的前缀
- rehash :: Rehash pyenv shims(在安装可执行文件后运行)
- root :: 显示保存版本和垫片的根目录
- shell :: 设置或显示特定于 shell 的 Python 版本
- shims:: 列出现有的 pyenv 垫片
- uninstall:: 卸载特定的 Python 版本
- version :: 显示当前的 Python 版本及其来源
- version-file :: 检测设置当前pyenv版本的文件
- version-name :: 显示当前 Python 版本
- version-origin ::解释当前 Python 版本是如何设置的
- versions::列出 pyenv 可用的所有 Python 版本
- whence ::列出包含给定可执行文件的所有 Python 版本
- which ::显示可执行文件的完整路径
windows
安装
命令
- commands 列出所有可用的 pyenv 命令
- local 设置或显示本地应用程序特定的 Python 版本
- global 设置或显示全局 Python 版本
- shell 设置或显示特定于 shell 的 Python 版本
- install 安装 1 个或多个版本的 Python
- uninstall 卸载 1 个或多个版本的
- Python Python更新 更新缓存版本 DB
- rehash Rehash pyenv shims(在切换 Python 版本后运行)
- vname 显示当前 Python
- version 显示当前 Python 版本及其原始
- version-name 显示当前 Python
- versions 列出 pyenv 可用的所有 Python 版本
- exec 通过首先准备 PATH 来运行可执行文件,以便选择的 Python
- which 显示可执行文件的完整路径,
- whence 列出包含给定可执行文件的所有 Python 版本
包管理
1
| pip install --upgrade pip
|
镜像源
1
| pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
|
1 2 3 4 5 6 7 8 9 10
| # 阿里云 https://mirrors.aliyun.com/pypi/simple/ # 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ # 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ # 中国科学技术大学 https://pypi.mirrors.ustc.edu.cn/simple/ # 豆瓣 https://pypi.douban.com/simple/
|
常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| "(py -2/3 -m)pip" #查看已经安装的第三方库 pip list # 安装第三方库 pip install 库名 # 查看安装库的详细信息 pip show 库名 # 卸载第三方库 pip uninstall 库名 # 卸载pip python -m pip uninstall pip # 检查哪些包需要更新 pip list --outdated # 升级包 pip install --upgrade SomePackage centos自带python2.7.5安装pip yum install -y python-pip
|
安装指定版本
1 2
| #只需通过 == 操作符指定 pip install robotframework==2.8.7
|
问题解决
1 2 3 4 5 6
| pip升级format问题: 先确保你在~/.pip 目录下有文件pip.conf 如果没有就创建这个文件:vim ~/.pip/pip.conf 在pip.conf文件里面加入代码: [list] format=columns
|
虚拟环境
确保 Python 已经具备虚拟环境配置库:
在某一文件夹下创建虚拟环境:
虚拟环境生效
使用虚拟环境的二进制目录中的脚本来“激活”该环境。不同平台调用的脚本是不同的(须将 <venv> 替换为包含虚拟环境的目录路径)
平台 |
Shell |
用于激活虚拟环境的命令 |
POSIX |
bash/zsh/git-bash |
$ source /bin/activate |
|
fish |
$ source /bin/activate.fish |
|
csh/tcsh |
$ source /bin/activate.csh |
|
PowerShell Core |
$ /bin/Activate.ps1 |
Windows |
cmd.exe |
C:> \Scripts\activate.bat |
|
PowerShell |
PS C:> \Scripts\Activate.ps1 |
命名规范
1 2 3 4 5 6 7 8 9 10
| 1. 变量命名总结: - 单下划线开头变量:protected - 双下划线开头变量:private - 双下划线开头,双下划线结尾:系统内置变量 2. 函数命名总结: - 私有方法:小写和一个前导下划线 - 特殊方法(魔术方法):小写和两个前导下划线,两个后置下划线 - 函数参数:小写和下划线,缺省值等号两边无空格 3. 类名称命名: - 类总是使用驼峰格式命名,即所有单词首字母大写其余字母小写
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| """ ★类名称命名: 类总是使用驼峰格式命名,即所有单词首字母大写其余字母小写。 类名应该简明,精确,并足以从中理解类所完成的工作。 常见的一个方法是使用表示其类型或者特性的后缀,例如:SQLEngine ,MimeTypes 对于基类而言,可以使用一个 Base 或者 Abstract 前缀 不要滥用 *args 和 **kwargs,可能会破坏函数的健壮性 """
""" 单下划线开头变量 _xxx,单下划线开头的变量,标明是一个受保护(protected)的变量,原则上不允许直接访问,但外部类还是可以访问到这个变量。 这只是程序员之间的一个约定,用于警告说明这是一个私有变量,外部类不要去访问它。 print(stu._name) 当要输入_name时,pycharm不会进行_name的提示 print(stu.age) 当要显示age时,pycharm会进行age的提示 """ class Student: def __init__(self, name, sex): self._name = name self.sex = sex stu = Student('zyf', 'Male') print(stu._name) print(stu.sex)
""" 双下划线开头 __xxx,双下划线开头的,表示的是私有类型(private)的变量。 只能是允许这个类本身进行访问了, 连子类也不可以. 用于命名一个类属性(类变量),调用时名字被改变 (在类Student内部,__name变成_Student__name,如 self._Student__name) 双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。仍然可以通过_Student__name来访问__name变量: """ class Person: def __init__(self, name): self.__name = name per = Person('zyf2') print(per._Person__name)
""" 双下划线开头,并且以双下划线结尾 __xxx__,以双下划线开头,并且以双下划线结尾的,是内置变量. 内置变量是可以直接访问的,不是 private 变量,如__init__,__import__或是__file__。 ★不要自己定义这类变量 xxx_,单下划线结尾的变量一般只是为了避免与 Python 关键字的命名冲突 USER_CONSTANT,大写加下划线,对于不会发生改变的全局变量,使用大写加下划线 """
""" 函数 总体而言应该使用,小写和下划线 私有方法 : 小写和一个前导下划线 这里和私有变量一样,并不是真正的私有访问权限。 同时也应该注意一般函数不要使用两个前导下划线(当遇到两个前导下划线时,Python 的名称改编特性将发挥作用)。特殊函数后面会提及。 #特殊方法 : 小写和两个前导下划线,两个后置下划线 #这种风格只应用于特殊函数,比如操作符重载等。 #函数参数 : 小写和下划线,缺省值等号两边无空格 """
class PrivateCase: @staticmethod def _secrete(): print(r"Don't test me") priC = PrivateCase() priC._secrete()
def __add__(self, other): return int.__add__(other)
def connect(self, user=None): self._user = user
|
常用类库
str
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| 1.是否以start开头:str.startswith('start') 是否以end结尾:str.endswith('end') 是否全为字母或数字:str.isalnum() 是否全字母:str.isalpha() 是否全数字:str.isdigit() 是否全⼩写:str.islower() 是否全⼤写:str.isupper() 2.全部⼤写:str.upper() 全部⼩写:str.lower() ⼤⼩写互换:str.swapcase() ⾸字母⼤写,其余⼩写:str.capitalize() ⾸字母⼤写:str.title() 3.搜索指定字符串,没有返回-1:str.find('t') 指定起始位置搜索:str.find('t',start) 指定起始及结束位置搜索:str.find(’t',start,end) 从右边开始查找:str.rfind('t') 搜索到多少个指定字符串:str.count('t') 上⾯所有⽅法都可⽤index代替,不同的是使⽤ index查找不到会抛异常,⽽find返回-1 1. 替换old为new:str.replace('old','new') 替换指定次数的old为new: str.replace(‘old','new',maxReplaceTimes) 2. 去两边空格:str.strip() 去左空格:str.lstrip() 去右空格:str.rstrip() 去两边字符串:str.strip(‘d’) 相应的也有lstrip,rstrip 3. str.join() ⽅法⽤于将序列中的元素以指 定的字符连接⽣成⼀个新的字符串。 s1.join(seq),s1=“-“,seq是你要连接的序列 4. print('Hi, %s, you have $%d.' % ('linda', 100000000)) print('Hello, {0}, 成绩提升了 {1:.1f}%'.format('⼩明', 17.125))
|
os
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| os.sep:取代操作系统特定的路径分隔符 os.name:指⽰你正在使⽤的⼯作平台。⽐如对于Windows,它是'nt',⽽对于Linux/Unix⽤户,它是'posix'。 os.getcwd:得到当前⼯作⽬录,即当前python脚本⼯作的⽬录路径。 os.getenv()和os.putenv:分别⽤来读取和设置环境变量 os.listdir():返回指定⽬录下的所有⽂件和⽬录名 os.remove(file):删除⼀个⽂件 os.stat(file):获得⽂件属性 os.chmod(file):修改⽂件权限和时间戳 os.mkdir(name):创建⽬录 os.rmdir(name):删除⽬录 os.removedirs(r“c:\python”):删除多个⽬录 os.system():运⾏shell命令 os.exit():终⽌当前进程 os.linesep:给出当前平台的⾏终⽌符。例如,Windows使⽤'\r\n',Linux使⽤'\n'⽽Mac使⽤'\r' os.path.split():返回⼀个路径的⽬录名和⽂件名 os.path.isfile()和os.path.isdir()分别检验给出的路径是⼀个⽬录还是⽂件 os.path.existe():检验给出的路径是否真的存在 os.listdir(dirname):列出dirname下的⽬录和⽂件 os.getcwd():获得当前⼯作⽬录 os.curdir:返回当前⽬录('.') os.chdir(dirname):改变⼯作⽬录到dirname os.path.isdir(name):判断name是不是⽬录,不是⽬录就返回false os.path.isfile(name):判断name这个⽂件是否存在,不存在返回false os.path.exists(name):判断是否存在⽂件或⽬录name os.path.getsize(name):或得⽂件⼤⼩,如果name是⽬录返回0L os.path.abspath(name):获得绝对路径 os.path.isabs():判断是否为绝对路径 os.path.normpath(path):规范path字符串形式 os.path.split(name):分割⽂件名与⽬录(事实上,如果你完全使⽤⽬录,它也会将最后⼀个⽬录作为⽂件名⽽分离,同时它不会判断⽂件或⽬录是否存在) os.path.splitext():分离⽂件名和扩展名 os.path.join(path,name):连接⽬录与⽂件名或⽬录 os.path.basename(path):返回⽂件名 os.path.dirname(path):返回⽂件路径
|
Error
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| AssertionError 断⾔语句(assert)失败 AttributeError 尝试访问未知的对象属性 EOFError ⽤户输⼊⽂件末尾标志EOF(Ctrl+d) ImportError 导⼊模块失败的时候 IndexError 索引超出序列的范围 KeyError 字典中查找⼀个不存在的关键字 KeyboardInterrupt ⽤户输⼊中断键(Ctrl+c) MemoryError 内存溢出(可通过删除对象释放内存) NameError 尝试访问⼀个不存在的变量 NotImplementedError 尚未实现的⽅法 OSError 操作系统产⽣的异常(例如打开⼀个不存在的⽂件) OverflowError 数值运算超出最⼤限制 RuntimeError ⼀般的运⾏时错误 StopIteration 迭代器没有更多的值 SyntaxError Python的语法错误 IndentationError 缩进错误 TabError Tab和空格混合使⽤ SystemError Python编译器系统错误 SystemExit Python编译器进程被关闭 TypeError 不同类型间的⽆效操作 UnboundLocalError 访问⼀个未初始化的本地变量(NameError的⼦类) ValueError 传⼊⽆效的参数 ZeroDivisionError 除数为零
|
连接数据库
python连接数据库
pyton连接数据库需要先安装pymysql模块:pip install pymysql
安装完成后导入pymysql模块:import pymysql
python连接数据库主要分五个步骤:
step1:连接数据库
step2:创建游标对象
step3:对数据库进行增删改查
step4:关闭游标
step5:关闭连接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| conn = pymysql.connect( host='localhost', user='root', password='redhat', db='helloTest', charset='utf8', )
cur = conn.cursor()
try: create_sqli = "create table hello (id int, name varchar(30));" cur.execute(create_sqli) except Exception as e: print("创建数据表失败:", e) else: print("创建数据表成功;")
try: insert_sqli = "insert into hello values(2, 'fensi');" cur.execute(insert_sqli) except Exception as e: print("插入数据失败:", e) else: conn.commit() print("插入数据成功;")
try: info = [(i, "westos%s" %(i)) for i in range(100)]
insert_sqli = "insert into hello values(%d, '%s');" for item in info: print('insert语句:', insert_sqli %item) cur.execute(insert_sqli %item)
insert_sqli = "insert into hello values(%s, %s);" cur.executemany(insert_sqli, info ) except Exception as e: print("插入多条数据失败:", e) else: conn.commit() print("插入多条数据成功;")
sqli = "select * from hello;" result = cur.execute(sqli) print(result) print(cur.fetchone()) print(cur.fetchone()) print(cur.fetchone()) print(cur.fetchmany(4)) info = cur.fetchall() print(info) print(len(info)) print(cur.rowcount)
print(cur.fetchmany(3)) print("正在移动指针到最开始......") cur.scroll(0, 'absolute') print(cur.fetchmany(3)) print("正在移动指针到倒数第2个......") print(cur.fetchall()) cur.scroll(-2, mode='relative') print(cur.fetchall())
cur.close()
conn.close()
|
获取表的字段名和信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| import time import pymysql
conn = pymysql.connect( host='localhost', user='root', password='redhat', db='helloTest', charset='utf8', ) with conn: print(conn.open) cur = conn.cursor() sqli = "select * from hello;" result = cur.execute(sqli) des = cur.description print("表的描述:", des) print("表头:", ",".join([item[0] for item in des])) cur.close() conn.close() print("with语句之外:", conn.open)
|
基于mysql数据库银行转账功能实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
import pymysql class TransferMoney(object): def __init__(self, conn): self.conn = conn self.cur = conn.cursor() def transfer(self, source_id, target_id, money): if not self.check_account_avaialbe(source_id): raise Exception("账户不存在") if not self.check_account_avaialbe(target_id): raise Exception("账户不存在") if self.has_enough_money(source_id, money): try: self.reduce_money(source_id, money) self.add_money(target_id, money) except Exception as e: print("转账失败:", e) self.conn.rollback() else: self.conn.commit() print("%s给%s转账%s金额成功" % (source_id, target_id, money)) def check_account_avaialbe(self, acc_id): """判断帐号是否存在, 传递的参数是银行卡号的id""" select_sqli = "select * from bankData where id=%d;" % (acc_id) print("execute sql:", select_sqli) res_count = self.cur.execute(select_sqli) if res_count == 1: return True else: return False def has_enough_money(self, acc_id, money): """判断acc_id账户上金额> money""" select_sqli = "select money from bankData where id=%d;" % (acc_id) print("execute sql:", select_sqli) self.cur.execute(select_sqli) acc_money = self.cur.fetchone()[0] if acc_money >= money: return True else: return False
def add_money(self, acc_id, money): update_sqli = "update bankData set money=money+%d where id=%d" % (money, acc_id) print("add money:", update_sqli) self.cur.execute(update_sqli)
def reduce_money(self, acc_id, money): update_sqli = "update bankData set money=money-%d where id=%d" % (money, acc_id) print("reduce money:", update_sqli) self.cur.execute(update_sqli) def __del__(self): self.cur.close() self.conn.close() if __name__ == '__main__': conn = pymysql.connect( host='localhost', user='root', password='redhat', db='helloTest', charset='utf8', autocommit=True, ) trans = TransferMoney(conn) trans.transfer(13997, 13998, 200)
|
execl与xmind
问题
xlrd.biffh.XLRDError: Excel xlsx file; not supported
1 2 3 4 5 6
| # 原因是最近xlrd更新到了2.0.1版本,只支持.xls文件。所以pandas.read_excel(‘xxx.xlsx’)会报错。 # 可以安装旧版xlrd pip uninstall xlrd pip install xlrd==1.2.0 # 也可以用openpyxl代替xlrd打开.xlsx文件: df=pandas.read_excel(‘data.xlsx’,engine=‘openpyxl’)
|
装饰器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import random import time
def time_count(func): def wrap(*args, **kwargs): time_flag = time.time() temp_result = func(*args, **kwargs) print(("time cost:", time.time() - time_flag)) return temp_result
return wrap
@time_count def loop_time(x, y): result = 0 for i in range(x, y): time.sleep(random.choice((0.1, 0.2, 0.3))) result = x + y return result
if __name__ == '__main__': print((loop_time(1, 2)))
|
远程操作linux
1 2 3 4 5 6 7 8
| 第一步:导入paramiko 第二步:创建SSHClient实例对象:ssh = paramiko.SSHClient() 第三步:即使没有公钥也可以访问:ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 第四步:连接远程linux机器:ssh.connect('linux所在机器的host',SSH端口号一般默认22,‘登录linux的用户名’,‘对应的密码’) 第四步:执行linux命令:ssh.excute_command('pwd'),执行多条命令用;隔开 第五步:获取输入输出及错误:把第四步赋值给stdin,stdout,stderr = ssh.excute_command('pwd;mkdir aaaa;ls') 传文件:sftp = ssh.open_sftp() sftp.put('源文件',“要拷贝的地址”) sftp.get()--从Linux往Windows拷贝 结束时候一定要加上 ssh.close
|
example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("192.168.13.128",22,"root","111111")
ssh.exec_command("pwd") ssh.exec_command("mkdir test") ssh.exec_command("cd test") stdin,stdout,stderr = ssh.exec_command("pwd") print(stdout.read()) ssh.close()
|
1 2 3 4 5 6 7 8 9 10 11
| import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('192.168.13.128',22,'root','111111') stdin,stdout,stderr = ssh.exec_command('ls') print(stdout.read()) sftp = ssh.open_sftp() sftp.put(r'E:\Downloads\test.py','/home/test.py') stdin,stdout,stderr = ssh.exec_command('ls;cd /home;ls;pwd') print(stdout.read())
|
json比较
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| from jsoncompare import jsoncompare as json_comp
json_comp.long = int json_comp.unicode = str json_comp.xrange = range
a = [ { "Key": "managed", "Value": "yes" } ]
b = [ { "Key": "managed", "Value": "No" } ]
json_comp.are_same(a, b)
print(json_comp.are_same(a, b)[1])
|
python2exe
环境准备
最好用虚拟环境,不加其他无关的依赖
favicon.ico在线制作:http://www.favicon-icon-generator.com/
构建exe执行文件
1 2 3 4 5
| Pyinstaller -F -w -i mergepdf.ico mergepdf.py
Pyinstaller -F mergepdf.py 打包exe Pyinstaller -F -w mergepdf.py 不带控制台的打包 Pyinstaller -F -w -i mergepdf.ico mergepdf.py 打包指定exe图标打包
|
官方文档:https://pyinstaller.readthedocs.io/en/stable/usage.html
参数
-h,–help |
查看该模块的帮助信息 |
-F,-onefile |
产生单个的可执行文件 |
-D,–onedir |
产生一个目录(包含多个文件)作为可执行程序 |
-a,–ascii |
不包含 Unicode 字符集支持 |
-d,–debug |
产生 debug 版本的可执行文件 |
-w,–windowed,–noconsolc |
指定程序运行时不显示命令行窗口(仅对 Windows 有效) |
-c,–nowindowed,–console |
指定使用命令行窗口运行程序(仅对 Windows 有效) |
-o DIR,–out=DIR |
指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件 |
-p DIR,–path=DIR |
设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径 |
-n NAME,–name=NAME |
指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字 |
参考
https://blog.csdn.net/weixin_42052836/article/details/82315118