标签归档:linux

经典编程书籍大全,涵盖:计算机系统与网络、系统架构、算法与数据结构、前端开发、后端开发、移动开发、数据库、测试、项目与团队、程序员职业修炼、求职面试等

太棒了-cs-书籍:超过200本经典的计算机书籍分享

经典的编程书单大全简介:

这里汇集如下主题的经典书籍:编程语言(JAVA、C++、C、python等等)、操作系统、计算机网络、系统架构、设计模式、程序员数学、测试、中间件、前端开发、后台开发、网络编程、linux使用及内核、求职面试、算法与数据结构安卓、IOS、数据库、redis等主流的编程学习书籍.

本仓库持续更新中,后续会陆续分享更多经典电子书,墙裂建议大家STAR下本仓库,下次找书直接Ctrl+F

如果国内访问Github网速较慢,可以访问码云:https://gitee.com/Marvinle/awesome-cs-books

大神刷题笔记

重要说明如果目录无法跳转的话,直接拉下去就可以了,这些书籍都是在同一个页面的,我只是方便大家找到对应的,弄了一个页内目录,不过有部分读者反馈他跳转不了(手机是绝对跳转不了的了)。


CS四大基础课

操作系统

编译原理

//TDOO

计算机网络

计算机组成原理

//TODO

计算机系统

算法和数据结构

网络编程

架构和设计模式

数据库和存储

C++

C++面试题集锦.PDF百度网盘链接密码:Lrv9

Java语言

Java语言

C语言

大数据

//TODO

机器学习和人工智能

//TODO

未分类

//TODO

全部汇总

目前我把电子书暂时放在公众号[编程指北]了,扫码关注下面公众号,回复“pdf”就有我收集的上百本经典计算机书籍,包含各个方向:

微信扫描上方二维码回复“pdf”

免责声明

书籍全部来源于网络其他人的整理,这里只是收集整理了他们的链接,如有侵权,马上联系我,我立马删除对应链接.我的邮箱:2039652520@qq.com

Youtube-dl-gui-用wxPython编写的流行的youtube-dl的跨平台前端GUI

一款流行的跨平台前端GUIyoutube-dl用wxPython编写的媒体下载器。Supported sites

屏幕截图

要求

下载次数

安装

从源安装

  1. 下载并解压缩源代码
  2. 将目录更改为youtube-dl-gui-0.4
  3. python setup.py install

安装PyPi

  1. pip install youtube-dlg

安装Windows Installer

  1. 下载并解压缩Windows Installer
  2. 运行setup.exe文件

贡献

作者

看见AUTHORS文件

许可证

这个Public Domain License

常见问题解答

看见FAQs文件

谢谢

感谢为这个项目做出贡献的每一个人,感谢@philipzae用于设计新的UI布局

Pyroscope-🔥连续性能分析平台🔥调试性能问题可归结为一行代码

Pyroscope是一个开源的连续性能剖析平台。它将帮助您:

  • 查找代码中的性能问题
  • 解决CPU利用率高的问题
  • 了解应用程序的调用树
  • 跟踪随时间变化的情况

🔥Pyroscope Live Demo🔥

功能

  • 可以存储来自多个应用程序的多年性能分析数据
  • 您可以一次查看多年数据,也可以放大特定事件
  • 低CPU开销
  • 高效压缩、低磁盘空间需求
  • 时髦的用户界面
  • 支持Go、Ruby和Python

分3步在本地试用Pyroscope:

# install pyroscope
brew install pyroscope-io/brew/pyroscope

# start pyroscope server:
pyroscope server

# in a separate tab, start profiling your app:
pyroscope exec python manage.py runserver # If using Python
pyroscope exec rails server               # If using Ruby

# If using Pyroscope cloud add flags for server address and auth token
# pyroscope exec -server-address "https://your_company.pyroscope.cloud" -auth-token "ps-key-1234567890" python manage.py runserver

文档

有关如何将Pyroscope与其他编程语言配合使用、在Linux上安装或在生产环境中使用的更多信息,请查看我们的文档:

下载次数

您可以从我们的网站下载适用于MacOS、Linux和Docker的最新版本的PyroscopeDownloads page

支持的集成

  • 红宝石(通过rbspy)
  • Python(通过py-spy)
  • 前往(途经pprof)
  • Linux eBPF(VIAprofile.py从…bcc-tools)
  • PHP(通过phpspy)
  • .NET(通过dotnet trace)
  • Java(即将推出)

请让我们知道您希望在our issues或在our slack

学分

高温镜之所以成为可能,要归功于许多人的出色工作,包括但不限于:

  • 布兰登·格雷格(Brendan Gregg)-火焰图的发明者
  • Julia Evans-Ruby的rbspy采样剖析器的创建者
  • 弗拉基米尔·阿加方金(Vladimir Agafonkin)-火焰手的创建者-快速火焰图形渲染器
  • Ben Frederickson-Python的py-spy采样分析器的创建者
  • Adam Saponara-PHP采样剖析器的创建者
  • Alexei Starovoitov、Brendan Gregg和其他许多使Linux内核中基于BPF的分析成为可能的人

贡献

要开始投稿,请查看我们的Contributing Guide

感谢Pyroscope的贡献者!

Mininet-软件定义网络快速原型仿真器

什么是Mininet?

Mininet在一台机器上模拟由主机、链路和交换机组成的完整网络。要创建两台主机、一台交换机的示例网络,只需运行:

sudo mn

Mininet对于交互式开发、测试和演示非常有用,尤其是那些使用OpenFlow和SDN的开发、测试和演示。在Mininet中建立原型的基于OpenFlow的网络控制器通常可以转移到硬件上,只需最少的更改即可实现全线速执行

它怎麽工作?

Mininet使用基于进程的虚拟化和网络命名空间创建虚拟网络-这些特性在最近的Linux内核中都可用。在Mininet中,主机被模拟为bash进程在网络命名空间中运行,因此任何通常在Linux服务器(如Web服务器或客户端程序)上运行的代码应该在Mininet“Host”中运行良好。Mininet“主机”将拥有自己的专用网络接口,并且只能看到自己的进程。Mininet中的交换机是基于软件的交换机,如Open vSwitch或OpenFlow参考交换机。链路是虚拟以太网对,它们驻留在Linux内核中,并将我们的仿真交换机连接到仿真主机(进程)

功能

Mininet包括:

  • 命令行启动器(mn)实例化网络
  • 用于创建各种大小和拓扑的网络的便捷Python API
  • 示例(在examples/目录)来帮助您入门
  • 通过Python提供完整的API文档help()文档字符串,以及使用生成PDF/HTML文档的能力make doc
  • 参数化拓扑(Topo子类)使用Mininet对象。例如,可以使用以下命令创建树网络:

    mn --topo tree,depth=2,fanout=3

  • 命令行界面(CLI类),它提供有用的诊断命令(如iperfping),以及向节点运行命令的能力。例如,

    mininet> h11 ifconfig -a

    通知主机H11运行该命令ifconfig -a

  • 清除垃圾(/tmp中的接口、进程、文件等)的“清理”命令它可能会被Mininet或Linux留下。如果事情不起作用,试试这个!

    mn -c

Python 3支持

  • Mininet 2.3.0支持Python3和Python2!
  • 您可以并排安装Mininet的Python 3和Python 2版本,但最新安装将确定默认情况下使用哪个Python版本mn
  • 你可以跑mn直接使用Python 2或Python 3,只要安装了适当版本的Mininet,例如
    $ sudo python2 `which mn`
    
  • 有关Python 3和Python 2支持的详细信息,请参阅上的发行说明http://docs.mininet.org

其他增强功能和信息

  • 支持Ubuntu 20.04 LTS(以及18.04和16.04)
  • 通过GitHub操作实现更可靠的测试和CI
  • 有关此版本和以前版本的更多信息,请参阅上的版本说明http://docs.mininet.org

安装

看见INSTALL有关安装说明和详细信息,请参阅

文档

除了API文档(make doc),上提供了许多有用的信息,包括Mininet演练和Python API简介Mininet Web Site还有一个维基,鼓励您阅读并参与其中,特别是常见问题解答(FAQ),网址为http://faq.mininet.org

支持

Mininet是由社区支持的。我们鼓励您加入Mininet邮件列表,mininet-discuss在:

https://mailman.stanford.edu/mailman/listinfo/mininet-discuss

加入我们吧

再次感谢所有Mininet的贡献者和用户!

Mininet是一个开源项目,目前托管在https://github.com/mininet我们鼓励您下载、检查、修改代码,并提交错误报告、错误修复、功能请求、新功能和其他问题以及拉取请求。感谢为Mininet项目贡献代码的每个人(有关更多信息,请参阅贡献者!)正是因为每个人的辛勤工作,Mininet才能不断成长和完善

享受Mininet吧

玩得开心!我们期待着看到您将如何使用Mininet来改变网络世界

鲍勃·兰茨,代表Mininet的贡献者

Psutil-Python中用于进程和系统监控的跨平台库

摘要

psutil(进程和系统实用程序)是一个跨平台库,用于检索正在运行的进程系统利用率(CPU、内存、磁盘、网络、传感器)。它主要用于系统监控分析和限制进程资源正在运行的进程的管理它实现了经典UNIX命令行工具提供的许多功能,例如ps、top、iotop、lsof、netstat、ifconfig、free还有其他人。psutil目前支持以下平台:

  • Linux操作系统
  • 窗口
  • MacOS
  • FreeBSD、OpenBSDNetBSD
  • Sun Solaris
  • AIX

支持的Python版本包括2.62.73.4+PyPy

资金来源

虽然psutil是自由软件,并且将永远是自由软件,但该项目将从一些资金中获益良多。就时间而言,只对我一个人来说,跟上错误报告和维护已经变得很难持续了。如果您是一家大量使用psutil的公司,您可以考虑通过以下方式成为赞助商GitHub SponsorsOpen CollectivePayPal并将您的徽标显示在此处和标牌上doc

赞助商

add your logo

支持者




add your avatar

贡献

看见contributing guidelines

用法示例

这几乎代表了整个psutil api。

CPU

>>> import psutil
>>>
>>> psutil.cpu_times()
scputimes(user=3961.46, nice=169.729, system=2150.659, idle=16900.540, iowait=629.59, irq=0.0, softirq=19.42, steal=0.0, guest=0, nice=0.0)
>>>
>>> for x in range(3):
...     psutil.cpu_percent(interval=1)
...
4.0
5.9
3.8
>>>
>>> for x in range(3):
...     psutil.cpu_percent(interval=1, percpu=True)
...
[4.0, 6.9, 3.7, 9.2]
[7.0, 8.5, 2.4, 2.1]
[1.2, 9.0, 9.9, 7.2]
>>>
>>> for x in range(3):
...     psutil.cpu_times_percent(interval=1, percpu=False)
...
scputimes(user=1.5, nice=0.0, system=0.5, idle=96.5, iowait=1.5, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)
scputimes(user=1.0, nice=0.0, system=0.0, idle=99.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)
scputimes(user=2.0, nice=0.0, system=0.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)
>>>
>>> psutil.cpu_count()
4
>>> psutil.cpu_count(logical=False)
2
>>>
>>> psutil.cpu_stats()
scpustats(ctx_switches=20455687, interrupts=6598984, soft_interrupts=2134212, syscalls=0)
>>>
>>> psutil.cpu_freq()
scpufreq(current=931.42925, min=800.0, max=3500.0)
>>>
>>> psutil.getloadavg()  # also on Windows (emulated)
(3.14, 3.89, 4.67)

内存

>>> psutil.virtual_memory()
svmem(total=10367352832, available=6472179712, percent=37.6, used=8186245120, free=2181107712, active=4748992512, inactive=2758115328, buffers=790724608, cached=3500347392, shared=787554304)
>>> psutil.swap_memory()
sswap(total=2097147904, used=296128512, free=1801019392, percent=14.1, sin=304193536, sout=677842944)
>>>

磁盘

>>> psutil.disk_partitions()
[sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,nosuid', maxfile=255, maxpath=4096),
 sdiskpart(device='/dev/sda2', mountpoint='/home', fstype='ext, opts='rw', maxfile=255, maxpath=4096)]
>>>
>>> psutil.disk_usage('/')
sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)
>>>
>>> psutil.disk_io_counters(perdisk=False)
sdiskio(read_count=719566, write_count=1082197, read_bytes=18626220032, write_bytes=24081764352, read_time=5023392, write_time=63199568, read_merged_count=619166, write_merged_count=812396, busy_time=4523412)
>>>

网络

>>> psutil.net_io_counters(pernic=True)
{'eth0': netio(bytes_sent=485291293, bytes_recv=6004858642, packets_sent=3251564, packets_recv=4787798, errin=0, errout=0, dropin=0, dropout=0),
 'lo': netio(bytes_sent=2838627, bytes_recv=2838627, packets_sent=30567, packets_recv=30567, errin=0, errout=0, dropin=0, dropout=0)}
>>>
>>> psutil.net_connections(kind='tcp')
[sconn(fd=115, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED', pid=1254),
 sconn(fd=117, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING', pid=2987),
 ...]
>>>
>>> psutil.net_if_addrs()
{'lo': [snicaddr(family=<AddressFamily.AF_INET: 2>, address='127.0.0.1', netmask='255.0.0.0', broadcast='127.0.0.1', ptp=None),
        snicaddr(family=<AddressFamily.AF_INET6: 10>, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None),
        snicaddr(family=<AddressFamily.AF_LINK: 17>, address='00:00:00:00:00:00', netmask=None, broadcast='00:00:00:00:00:00', ptp=None)],
 'wlan0': [snicaddr(family=<AddressFamily.AF_INET: 2>, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None),
           snicaddr(family=<AddressFamily.AF_INET6: 10>, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None),
           snicaddr(family=<AddressFamily.AF_LINK: 17>, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}
>>>
>>> psutil.net_if_stats()
{'lo': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=65536),
 'wlan0': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=100, mtu=1500)}
>>>

传感器

>>> import psutil
>>> psutil.sensors_temperatures()
{'acpitz': [shwtemp(label='', current=47.0, high=103.0, critical=103.0)],
 'asus': [shwtemp(label='', current=47.0, high=None, critical=None)],
 'coretemp': [shwtemp(label='Physical id 0', current=52.0, high=100.0, critical=100.0),
              shwtemp(label='Core 0', current=45.0, high=100.0, critical=100.0)]}
>>>
>>> psutil.sensors_fans()
{'asus': [sfan(label='cpu_fan', current=3200)]}
>>>
>>> psutil.sensors_battery()
sbattery(percent=93, secsleft=16628, power_plugged=False)
>>>

其他系统信息

>>> import psutil
>>> psutil.users()
[suser(name='giampaolo', terminal='pts/2', host='localhost', started=1340737536.0, pid=1352),
 suser(name='giampaolo', terminal='pts/3', host='localhost', started=1340737792.0, pid=1788)]
>>>
>>> psutil.boot_time()
1365519115.0
>>>

流程管理

>>> import psutil
>>> psutil.pids()
[1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224, 268, 1215,
 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355, 2637, 2774, 3932,
 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245, 4263, 4282, 4306, 4311,
 4312, 4313, 4314, 4337, 4339, 4357, 4358, 4363, 4383, 4395, 4408, 4433,
 4443, 4445, 4446, 5167, 5234, 5235, 5252, 5318, 5424, 5644, 6987, 7054,
 7055, 7071]
>>>
>>> p = psutil.Process(7055)
>>> p
psutil.Process(pid=7055, name='python3', status='running', started='09:04:44')
>>> p.name()
'python3'
>>> p.exe()
'/usr/bin/python3'
>>> p.cwd()
'/home/giampaolo'
>>> p.cmdline()
['/usr/bin/python', 'main.py']
>>>
>>> p.pid
7055
>>> p.ppid()
7054
>>> p.children(recursive=True)
[psutil.Process(pid=29835, name='python3', status='sleeping', started='11:45:38'),
 psutil.Process(pid=29836, name='python3', status='waking', started='11:43:39')]
>>>
>>> p.parent()
psutil.Process(pid=4699, name='bash', status='sleeping', started='09:06:44')
>>> p.parents()
[psutil.Process(pid=4699, name='bash', started='09:06:44'),
 psutil.Process(pid=4689, name='gnome-terminal-server', status='sleeping', started='0:06:44'),
 psutil.Process(pid=1, name='systemd', status='sleeping', started='05:56:55')]
>>>
>>> p.status()
'running'
>>> p.username()
'giampaolo'
>>> p.create_time()
1267551141.5019531
>>> p.terminal()
'/dev/pts/0'
>>>
>>> p.uids()
puids(real=1000, effective=1000, saved=1000)
>>> p.gids()
pgids(real=1000, effective=1000, saved=1000)
>>>
>>> p.cpu_times()
pcputimes(user=1.02, system=0.31, children_user=0.32, children_system=0.1, iowait=0.0)
>>> p.cpu_percent(interval=1.0)
12.1
>>> p.cpu_affinity()
[0, 1, 2, 3]
>>> p.cpu_affinity([0, 1])  # set
>>> p.cpu_num()
1
>>>
>>> p.memory_info()
pmem(rss=10915840, vms=67608576, shared=3313664, text=2310144, lib=0, data=7262208, dirty=0)
>>> p.memory_full_info()  # "real" USS memory usage (Linux, macOS, Win only)
pfullmem(rss=10199040, vms=52133888, shared=3887104, text=2867200, lib=0, data=5967872, dirty=0, uss=6545408, pss=6872064, swap=0)
>>> p.memory_percent()
0.7823
>>> p.memory_maps()
[pmmap_grouped(path='/lib/x8664-linux-gnu/libutil-2.15.so', rss=32768, size=2125824, pss=32768, shared_clean=0, shared_dirty=0, private_clean=20480, private_dirty=12288, referenced=32768, anonymous=12288, swap=0),
 pmmap_grouped(path='/lib/x8664-linux-gnu/libc-2.15.so', rss=3821568, size=3842048, pss=3821568, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=3821568, referenced=3575808, anonymous=3821568, swap=0),
 pmmap_grouped(path='[heap]',  rss=32768, size=139264, pss=32768, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=32768, referenced=32768, anonymous=32768, swap=0),
 pmmap_grouped(path='[stack]', rss=2465792, size=2494464, pss=2465792, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=2465792, referenced=2277376, anonymous=2465792, swap=0),
 ...]
>>>
>>> p.io_counters()
pio(read_count=478001, write_count=59371, read_bytes=700416, write_bytes=69632, read_chars=456232, write_chars=517543)
>>>
>>> p.open_files()
[popenfile(path='/home/giampaolo/monit.py', fd=3, position=0, mode='r', flags=32768),
 popenfile(path='/var/log/monit.log', fd=4, position=235542, mode='a', flags=33793)]
>>>
>>> p.connections(kind='tcp')
[pconn(fd=115, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED'),
 pconn(fd=117, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING')]
>>>
>>> p.num_threads()
4
>>> p.num_fds()
8
>>> p.threads()
[pthread(id=5234, user_time=22.5, system_time=9.2891),
 pthread(id=5237, user_time=0.0707, system_time=1.1)]
>>>
>>> p.num_ctx_switches()
pctxsw(voluntary=78, involuntary=19)
>>>
>>> p.nice()
0
>>> p.nice(10)  # set
>>>
>>> p.ionice(psutil.IOPRIO_CLASS_IDLE)  # IO priority (Win and Linux only)
>>> p.ionice()
pionice(ioclass=<IOPriority.IOPRIO_CLASS_IDLE: 3>, value=0)
>>>
>>> p.rlimit(psutil.RLIMIT_NOFILE, (5, 5))  # set resource limits (Linux only)
>>> p.rlimit(psutil.RLIMIT_NOFILE)
(5, 5)
>>>
>>> p.environ()
{'LC_PAPER': 'it_IT.UTF-8', 'SHELL': '/bin/bash', 'GREP_OPTIONS': '--color=auto',
'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg',
 ...}
>>>
>>> p.as_dict()
{'status': 'running', 'num_ctx_switches': pctxsw(voluntary=63, involuntary=1), 'pid': 5457, ...}
>>> p.is_running()
True
>>> p.suspend()
>>> p.resume()
>>>
>>> p.terminate()
>>> p.kill()
>>> p.wait(timeout=3)
<Exitcode.EX_OK: 0>
>>>
>>> psutil.test()
USER         PID %CPU %MEM     VSZ     RSS TTY        START    TIME  COMMAND
root           1  0.0  0.0   24584    2240            Jun17   00:00  init
root           2  0.0  0.0       0       0            Jun17   00:00  kthreadd
...
giampaolo  31475  0.0  0.0   20760    3024 /dev/pts/0 Jun19   00:00  python2.4
giampaolo  31721  0.0  2.2  773060  181896            00:04   10:30  chrome
root       31763  0.0  0.0       0       0            00:05   00:00  kworker/0:1
>>>

进一步的流程API

>>> import psutil
>>> for proc in psutil.process_iter(['pid', 'name']):
...     print(proc.info)
...
{'pid': 1, 'name': 'systemd'}
{'pid': 2, 'name': 'kthreadd'}
{'pid': 3, 'name': 'ksoftirqd/0'}
...
>>>
>>> psutil.pid_exists(3)
True
>>>
>>> def on_terminate(proc):
...     print("process {} terminated".format(proc))
...
>>> # waits for multiple processes to terminate
>>> gone, alive = psutil.wait_procs(procs_list, timeout=3, callback=on_terminate)
>>>

Windows服务

>>> list(psutil.win_service_iter())
[<WindowsService(name='AeLookupSvc', display_name='Application Experience') at 38850096>,
 <WindowsService(name='ALG', display_name='Application Layer Gateway Service') at 38850128>,
 <WindowsService(name='APNMCP', display_name='Ask Update Service') at 38850160>,
 <WindowsService(name='AppIDSvc', display_name='Application Identity') at 38850192>,
 ...]
>>> s = psutil.win_service_get('alg')
>>> s.as_dict()
{'binpath': 'C:\\Windows\\System32\\alg.exe',
 'description': 'Provides support for 3rd party protocol plug-ins for Internet Connection Sharing',
 'display_name': 'Application Layer Gateway Service',
 'name': 'alg',
 'pid': None,
 'start_type': 'manual',
 'status': 'stopped',
 'username': 'NT AUTHORITY\\LocalService'}

使用psutil的项目

这里有一些我觉得特别有趣的:

港口

Kivy-用Python编写的开源UI框架,运行在Windows、Linux、MacOS、Android和iOS上

Kivy

创新的用户界面变得轻松

Kivy是一个开源的、跨平台的Python用于开发利用创新的多点触控用户界面的应用程序的框架。其目的是允许快速简单的交互设计和快速原型设计,同时使您的代码可重用和可部署

Kivy是用Python编写的,Cython,基于OpenGL ES 2,支持多种输入设备,具有丰富的微件库。使用相同的代码库,您可以针对Windows、MacOS、Linux、Android和iOS。所有Kivy小部件都支持多点触控

Kivy是麻省理工学院许可的,由一个伟大的社区积极开发,并得到由管理的许多项目的支持Kivy Organization

安装、文档和示例

详细的安装说明以及教程和一般文档(包括API参考)可在以下位置找到https://kivy.org/docs一个PDF version也是可用的

Kivy提供了许多示例,这些示例可以在examples文件夹

支持

如果您需要帮助,可以在我们的邮件列表上寻求帮助:

我们还有一个不和谐的频道:

贡献

我们喜欢提出请求和讨论新奇的想法。请查看我们的contribution guide你可以随意改进基维

以下邮件列表和不和谐频道专门用于讨论开发Kivy框架及其姊妹项目:

不和谐频道:

姊妹项目

  • Buildozer:Android和iOS通用Python打包程序
  • Plyer:平台相关API的平台无关Python包装器
  • Pyjnius:从Python动态访问Java/Android API
  • Pyobjus:从Python动态访问Objective-C/IOS API
  • Python for Android:用于为Android构建和打包Python应用程序的工具链
  • Kivy iOS:用于构建和打包适用于iOS的Kivy应用程序的工具链
  • Audiostream:用于直接访问麦克风和扬声器的库
  • KivEnt:面向Kivy的基于实体的游戏引擎
  • Garden:由用户创建和维护的小部件和库
  • Oscpy:OSC的一个快速且经过测试的python2/3实现

许可证

  • Kivy根据麻省理工学院的执照条款被释放。请参考许可证文件
  • 提供的字体Roboto和Roboto Mono根据Apache License, Version 2.0可以查看DejaVuSans(用于虚拟键盘)许可证here
  • 当前的UI设计改编自Moblintouch主题的SVG,并根据LGPLv2.1

贡献者

这个项目的存在要归功于所有做出贡献的人。[Contribute]

支持者

感谢我们所有的支持者!🙏[Become a backer]

赞助商

通过成为赞助商来支持这个项目。您的徽标将在此处显示,并带有指向您的网站的链接。[Become a sponsor]