1.django如何执行exe文件(2023年最新分享)
2.python看对象占用多少内存(python查看对象的源码内存地址)
django如何执行exe文件(2023年最新分享)
导读:今天首席CTO笔记来给各位分享关于django如何执行exe文件的相关内容,如果能碰巧解决你现在面临的源码问题,别忘了关注本站,源码现在开始吧!源码C:\Python\Django\setup.py'>Django安装问题,源码我在cmd上输入如下:C:Users\Adiministrator>C:\Python\Django\setup.py首先你要明白这个命令是源码个性系统源码大全分三部分的,第一个是源码启动Python来执行文件,第二个是源码执行的文件名(setup.py),第三个是源码参数(install)。C:\python\django\python是源码不能执行的,因为在那个目录下并没有叫Python.exe的源码可执行文件。正确的源码写法应该是:
c:\python\pythonc:\python\django\setup.pyinstall
或者直接c:\python\django\setup.pyinstall,这个在Windows下应该也是源码可以的,因为py文件默认是源码用python打开的。在这种情况下,源码还可以先键入cdc:\python\django,进入这个目录,然后再执行setup.pyinstall
Django非常棒,我也正在学。
Django源码阅读(一)项目的生成与启动
诚实的说,直到目前为止,我并不欣赏django。在我的认知它并不是多么精巧的设计。只是由功能堆积起来的"成熟方案"。但每一样东西的崛起都是时代的选择。无论你多么不喜欢,但它被需要。希望有一天,补码是否等于源码python能有更多更丰富的成熟方案,且不再被诟病性能和可维护性。(屁话结束)
取其精华去其糟粕,django的优点是方便,我们这次源码阅读的目的是探究其方便的本质。计划上本次源码阅读不会精细到每一处,而是大体以功能为单位进行解读。
django-adminstartprojectHelloWorld即可生成django项目,命令行是exe格式的。
manage.py把参数交给命令行解析。
execute_from_command_line()通过命令行参数,创建一个管理类。然后运行他的execute()。
如果设置了reload,将会在启动前先check_errors。
check_errors()是个闭包,所以上文结尾是(django.setup)()。
直接看最后一句settings.INSTALLED_APPS。从settings中抓取app
注意,这个settings还不是我们项目中的settings.py。而是一个对象,位于django\conf\__init__.py
这是个Settings类的懒加载封装类,直到__getattr__取值时才开始初始化。然后从Settings类的实例中取值。且会讲该值赋值到自己的__dict__上(下次会直接在自己身上找到,因为__getattr__优先级较低)
为了方便debug,我们直接写个run.py。查看大型游戏源码不用命令行的方式。
项目下建个run.py,模拟runserver命令
debug抓一下setting_module
回到setup()中的最后一句apps.populate(settings.INSTALLED_APPS)
开始看apps.populate()
首先看这段
这些App最后都会封装成为AppConfig。且会装载到self.app_configs字典中
随后,分别调用每个appConfig的import_models()和ready()方法。
App的装载部分大体如此
为了方便debug我们改写下最后一句
res的类型是Commanddjango.contrib.staticfiles.management.commands.runserver.Commandobjectat0xEDA0
重点是第二句,让我们跳到run_from_argv()方法,这里对参数进行了若干处理。
用pycharm点这里的handle会进入基类的方法,无法得到正确的走向。实际上子类Commond重写了这个方法。
这里分为两种情况,如果是reload重载时,会直接执行inner_run(),而项目启动需要先执行其他逻辑。
django项目启动时,实际上会启动两次,如果我们在项目入口(manage.py)中设置个print,会发现它会打印两次。
第一次启动时,DJANGO_AUTORELOAD_ENV为None,无法进入启动逻辑。会进入restart_with_reloader()。
在这里会将DJANGO_AUTORELOAD_ENV置为True,随后重启。
第二次时,可以进入启动逻辑了。互助盘app源码
这里创建了一个django主线程,将inner_run()传入。
随后本线程通过reloader.run(django_main_thread),创建一个轮询守护进程。
我们接下来看django的主线程inner_run()。
当我们看到wsgi时,django负责的启动逻辑,就此结束了。接下来的工作交由wsgi服务器了
这相当于我们之前在fastapi中说到的,将fastapi的app交由asgi服务器。(asgi也是django提出来的,两者本质同源)
那么这个wsgi是从哪来的?让我们来稍微回溯下
这个settings是一个对象,在之前的操作中已经从settings.py配置文件中获得了自身的属性。所以我们只需要去settings.py配置文件中寻找。
我们来寻找这个get_wsgi_application()。
它会再次调用setup(),重要的是,返回一个WSGIHandler类的实例。
这就是wsgiapp本身。
load_middleware()为构建中间件堆栈,这也是wsgiapp获取setting信息的唯一途径。导入settings.py,生成中间件堆栈。
如果看过我之前那篇fastapi源码的,应该对中间件堆栈不陌生。
app入口→中间件堆栈→路由→路由节点→endpoint
所以,wsgiapp就此构建完毕,ext.js 源码服务器传入请求至app入口,即可经过中间件到达路由进行分发。
如何执行python第三方包windowsexe格式python第三方包的windows安装文件exe格式,这上面有很多python第三方包的二进制安装文件,包括位和位的。下载安装就ok了!
这下面有很多python第三方包的二进制安装文件,包括位和位的。下载安装就ok了!
包括了mysqldb,ldap等。
Indexbydate:
fiona
scikit-image
netcdf4
mercurial
scikits.audiolab
numba
llvmpy
python-igraph
rpy2
numpy
opencv
zope.interface
sfepy
quantlib
gdal
imread
django
psychopy
cx_freeze
msgpack
regex
cellcognition
vigra
scikit-learn
pytables
h5py
blender-mathutils
htseq
bioformats
simplejson
pyzmq
mako
simpleitk
qimage2ndarray
ujson
vlfd
libsvm
liblinear
cgkit
scipy
distribute
noise
theano
pyalembic
openimageio
pyaudio
pymca
pyamg
pgmagick
lxml
steps
sqlalchemy
cffi
biopython
python-ldap
pycurl
nipy
nibabel
pygments
mahotas
py-postgresql
pyamf
planar
holopy
pyvisa
jcc
polymode
polygon
cython
pyropes
llist
shapely
vtk
pymongo
libpython
meshpy
pandas
umysql
epydoc
coverage
cheetah
pyrxp
pybluez
pythonmagick
bsdiff4
pymssql
pymol
boost.python
orange
requests
pywcs
python-sundials
pymix
pyminuit
pylzma
pyicu
assimulo
basemap
pygraphviz
pyproj
mpi4py
spyder
pytz
pyfits
mysql-python
pygame
pycparser
twisted
pil
qutip
openexr
nipype
python-snappy
visvis
docutils
pyhdf
pyqwt
kivy
scikits.umfpack
psycopg
ets
guiqwt
veusz
pyqt
pyside
dpmix
py-fcm
scikits.hydroclimpy
smc.freeimage
scipy-stack
ipython
nose
mxbase
numexpr
pyyaml
ode
virtualenv
aspell_python
tornado
pywavelets
bottleneck
networkx
statsmodels
pylibdeconv
pyhook
lmfit
slycot
ndimage
scikits.scattpy
cvxopt
pymc
pysparse
scikits.odes
matplotlib
vpython
pycuda
pyopencl
pymvpa
pythonnet
cld
mod_wsgi
nltk
python-levenshtein
rtree
pywin
scientificpython
sympy
thrift
pyopengl-accelerate
mdp
pyopengl
gmpy
reportlab
natgrid
scikits.vectorplot
pyreadline
milk
blosc
pycogent
pip
gevent
scons
carray
python-dateutil
jinja2
markupsafe
jsonlib
pysfml
fonttools
silvercity
console
python-cjson
pycluster
cdecimal
pytst
autopy
sendkeys
ceodbc
fipy
psutil
pyephem
pycifrw
blist
line_profiler
pydbg
bitarray
pyglet
python-lzo
faulthandler
delny
pyexiv2
ilastik
twainmodule
scitools
pyspharm
casuarius
pyodbc
greenlet
nitime
pylibtiff
mmtk
pycairo
pysqlite
curses
videocapture
bazaar
nlopt
trfit
libsbml
oursql
sphinx
cellprofiler
py2exe
re2
liblas
cgal-python
pymedia
ffnet
pyfftw
libxml-python
pyfltk
pymex
pymatlab
zodb3
mmlib
pygtk
pyserial
babel
scikits.ann
scikits.delaunay
numeric
pulp
nmoldyn
pymutt
iocbio
jpype
wxpython
pybox2d
dipy
mmseg
pynifti
scikits.samplerate
scikits.timeseries
vitables
quickfix
如何将django1.7程序打包成exe程序.官网下载对应的pyinstall工具,我下载的是PyInstaller-3.2.1.zip并解压
2.通过cmd跳转到pyinstaller目录并执行setup.pyinstall进行安装.这时会向你的python路径安装必要的第三方包,当然细节可以不用关心
3.安装成功后就可以使用了。
TK-GUI.py是我的源程序
结语:以上就是首席CTO笔记为大家整理的关于django如何执行exe文件的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~
python看对象占用多少内存(python查看对象的内存地址)
本篇文章给大家谈谈python看对象占用多少内存,以及python查看对象的内存地址对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录一览:1、Python对象2、python内存占用分析工具3、使用sys.getsizeof查看python对象的内存占用4、如何估算一个Python对象的内存占用5、python创建类占用内存Python对象众所周知,Python是一门面向对象的语言,在Python无论是数值、字符串、函数亦或是类型、类,都是对象。
对象是在堆上分配的结构,我们定义的所有变量、函数等,都存储于堆内存,而变量名、函数名则是一个存储于栈中、指向堆中具体结构的引用。
要想深入学习Python,首先需要知道Python对象的定义。
我们通常说的Python都是指CPython,底层由C语言实现,源码地址:cpython[GitHub]
Python对象的定义位于Include/object.h,是一个名为PyObject的结构体:
Python中的所有对象都继承自PyObejct,PyObject包含一个用于垃圾回收的双向链表,一个引用计数变量ob_refcnt和一个类型对象指针ob_type
从PyObejct的注释中,我们可以看到这样一句:每个指向可变大小Python对象的指针也可以转换为PyVarObject*(可变大小的Python对象会在下文中解释)。PyVarObejct就是在PyObject的基础上多了一个ob_size字段,用于存储元素个数:
在PyObject结构中,还有一个类型对象指针ob_type,用于表示Python对象是什么类型,定义Python对象类型的是一个PyTypeObject接口体
实际定义是位于Include/cpython/object.h的_typeobject:
在这个类型对象中,不仅包含了对象的类型,还包含了如分配内存大小、对象标准操作等信息,主要分为:
以Python中的int类型为例,int类型对象的定义如下:
从PyObject的定义中我们知道,每个对象的ob_type都要指向一个具体的类型对象,比如一个数值型对象,它的ob_type会指向int类型对象PyLong_Type。
PyTypeObject结构体第一行是一个PyObject_VAR_HEAD宏,查看宏定义可知PyTypeObject是一个变长对象
也就是说,归根结底类型对象也是一个对象,也有ob_type属性,那PyLong_Type的ob_type是什么呢?
回到PyLong_Type的定义,第一行PyVarObject_HEAD_INIT(PyType_Type,0),查看对应的宏定义
由以上关系可以知道,PyVarObject_HEAD_INIT(PyType_Type,0)={ { _PyObject_EXTRA_INIT1,PyType_Type}0},将其代入PyObject_VAR_HEAD,得到一个变长对象:
这样看就很明确了,PyLong_Type的类型就是PyType_Typ,同理可知,Python类型对象的类型就是PyType_Type,而PyType_Type对象的类型是它本身
从上述内容中,我们知道了对象和对象类型的定义,那么根据定义,对象可以有以下两种分类
Python对象定义有PyObject和PyVarObject,因此,根据对象大小是否可变的区别,Python对象可以划分为可变对象(变长对象)和不可变对象(定长对象)
原本的对象a大小并没有改变,只是s引用的对象改变了。这里的对象a、对象b就是定长对象
可以看到,变量l仍然指向对象a,只是对象a的内容发生了改变,数据量变大了。这里的对象a就是变长对象
由于存在以上特性,所以使用这两种对象还会带来一种区别:
声明s2=s,修改s的值:s='newstring',s2的值不会一起改变,因为只是s指向了一个新的对象,s2指向的旧对象的值并没有发生改变
声明l2=l,修改l的值:l.append(6),此时l2的值会一起改变,因为l和l2指向的是同一个对象,而该对象的内容被l修改了
此外,对于字符串对象,Python还有一套内存复用机制,如果两个字符串变量值相同,那它们将共用同一个对象:
对于数值型对象,Python会默认创建0~以内的整数对象,也就是0~之间的数值对象是共用的:
按照Python数据类型,对象可分为以下几类:
Python创建对象有两种方式,泛型API和和类型相关的API
这类API通常以PyObject_xxx的形式命名,可以应用在任意Python对象上,如:
使用PyObjecg_New创建一个数值型对象:
这类API通常只能作用于一种类型的对象上,如:
使用PyLong_FromLong创建一个数值型对象:
在我们使用Python声明变量的时候,并不需要为变量指派类型,在给变量赋值的时候,可以赋值任意类型数据,如:
从Python对象的定义我们已经可以知晓造成这个特点的原因了,Python创建对象时,会分配内存进行初始化,然后Python内部通过PyObject*变量来维护这个对象,所以在Python内部各函数直接传递的都是一种泛型指针PyObject*,这个指针所指向的对象类型是不固定的,只能通过所指对象的ob_type属性动态进行判断,而Python正是通过ob_type实现了多态机制
Python在管理维护对象时,通过引用计数来判断内存中的对象是否需要被销毁,Python中所有事物都是对象,所有对象都有引用计数ob_refcnt。
当一个对象的引用计数减少到0之后,Python将会释放该对象所占用的内存和系统资源。
但这并不意味着最终一定会释放内存空间,因为频繁申请释放内存会大大降低Python的执行效率,因此Python中采用了内存对象池的技术,是的对象释放的空间会还给内存池,而不是直接释放,后续需要申请空间时,优先从内存对象池中获取。
python内存占用分析工具
pipinstallmemory_profiler
pipinstallpsutil
pipinstallmatplotlib
使用方法
frommemory_profilerimportprofile
@profile(precision=4,stream=open('test.log','w+'))
deftest(args:List):
...
运行:
python3test.py
Memusage:表示执行该行后Python解释器的内存使用情况
Increment:表示当前行的内存相对于上一行的差异,即自己本身增长了多少,如果减少了则不显示.
使用sys.getsizeof查看python对象的内存占用使用sys.getsizeof方法可以查看python对象的内存占用,单位:字节(byte)
实际上是调用了__sizeof__方法:
有些数据类型在Python3和Python2中占用的内存是不同的,例如range:
关于这个值是怎么算出来的,有待研究~
暂时已知:这个值包括该对象的数值、签名(包括数据类型、参数、调用方式等)等一系列数据所占总内存。可变对象所占内存可能极小,因为对象是指针,指向很大的数据。
如何估算一个Python对象的内存占用如果想自己写程序来实现的话,可以参考它们的源码。
top/free都是在procps包中(apt-getsourceprocps)。
找到cpus_refresh()函数,你可以看到它是怎样从/proc/stat解析出CPU的使用率的。meminfo()函数则展示了如何从/proc/meminfo解析出内存的使用率(这个文件自己解析也很简单)。
python创建类占用内存2g。python创建类占用内存有2g。Python由荷兰数学和计算机科学研究学会的吉多范罗苏姆于年代初设计,作为一门叫做ABC语言的替代品。
关于python看对象占用多少内存和python查看对象的内存地址的介绍到此就结束了,不知道你从中找到你需要的信息了吗?如果你还想了解更多这方面的信息,记得收藏关注本站。