教育学校网站做,深圳龙华网站建设公司哪家好,wordpress经典编辑器没有,网页添加背景图片代码得益于计算机硬件算力的提升#xff0c;应用原型开发甚至生产环境应用都可以使用解释型语言来构建#xff0c;目前Python和Node.js都是比较流行的快速开发部署的应用程序语言#xff0c;从最早期的shell脚本开始#xff0c;解释型语言对模块化开发支持度越来越好#xff0…得益于计算机硬件算力的提升应用原型开发甚至生产环境应用都可以使用解释型语言来构建目前Python和Node.js都是比较流行的快速开发部署的应用程序语言从最早期的shell脚本开始解释型语言对模块化开发支持度越来越好语言模块化方案的不同会导致代码组织结构的差异但无论何种形式目的都是实现不同代码逻辑块的索引和复用。PythonPython的包管理工具是pip其实pip也是以一个python package的形式存在于系统之中对于解释型语言其运行时环境可近似为解释器包在解释器初始化启动时就会构建包的索引路径随着入口代码的执行需要加载依赖的包。Package Path对于python而言解释器就是不同版本的python主程序对于不同的python主程序可以通过运行site包来查看当前配置下加载模块的目录。adminUbuntu:~$ python3 -m site sys.path [ /home/admin, /usr/lib/python312.zip, /usr/lib/python3.12, /usr/lib/python3.12/lib-dynload, /usr/local/lib/python3.12/dist-packages, /usr/lib/python3/dist-packages, ] USER_BASE: /home/admin/.local (exists) USER_SITE: /home/admin/.local/lib/python3.12/site-packages (doesnt exist) ENABLE_USER_SITE: TrueGlobal Level User LevelImport modules from which directories就是很关键的site configuration命令的打印显示出python对包的检索路径有Global和User两个不同的范围其中sys.path会在python启动时自动填入执行命令的工作目录PYTHONPATH定义的目录以及其他固定系统级别的包检索路径。此外每个用户都会有自己独立的home路径下包存储路径来存放和索引用户级别的包因为不同用户的home路径不同所以用户级别的包索引路径一定不同以此实现不同用户的运行时环境的不同ENABLE_USER_SITE为True代表USER_SITE路径会在Python启动时添加到sys.path里。而不同路径下包的安装体现在PIP命令的参数:# Global Level Package Install sudo pip3 install package # User Level Package Install pip3 install --user packageProject Level - venv随着应用开发部署的需求增多只有全局和用户两种包索引路径从颗粒度的角度还是过粗所以从项目的角度定义包索引目录就成为更加细致的需求目前的方案时使用虚拟环境构建虚拟环境的venv也是一个python packageadminUbuntu:~$ python3 -m venv venv adminUbuntu:~/venv$ tree -L 5 . ├── bin │ ├── activate │ ├── activate.csh │ ├── activate.fish │ ├── Activate.ps1 │ ├── pip │ ├── pip3 │ ├── pip3.12 │ ├── python - python3 │ ├── python3 - /usr/bin/python3 │ └── python3.12 - python3 ├── include │ └── python3.12 ├── lib │ └── python3.12 │ └── site-packages │ ├── pip │ │ ├── __init__.py │ │ ├── _internal │ │ ├── __main__.py │ │ ├── __pip-runner__.py │ │ ├── __pycache__ │ │ ├── py.typed │ │ └── _vendor │ └── pip-24.0.dist-info │ ├── AUTHORS.txt │ ├── entry_points.txt │ ├── INSTALLER │ ├── LICENSE.txt │ ├── METADATA │ ├── RECORD │ ├── REQUESTED │ ├── top_level.txt │ └── WHEEL ├── lib64 - lib └── pyvenv.cfg 13 directories, 24 files一般会通过加载激活脚本来进入venv的环境虚拟环境所有的命令和包索引都限制在venv目录下adminUbuntu:~$ source venv/bin/activate (venv) adminUbuntu:~$ which python /home/admin/venv/bin/python (venv) adminUbuntu:~$ which pip /home/admin/venv/bin/pip (venv) adminUbuntu:~$ python -m site sys.path [ /home/admin, /usr/lib/python312.zip, /usr/lib/python3.12, /usr/lib/python3.12/lib-dynload, /home/admin/venv/lib/python3.12/site-packages, ] USER_BASE: /home/admin/.local (exists) USER_SITE: /home/admin/.local/lib/python3.12/site-packages (doesnt exist) ENABLE_USER_SITE: False当然也可以直接执行venv目录下的python或者pip命令因为pyvenv.cfg对环境参数的配置所以就实现了虚拟的执行环境adminUbuntu:~/venv$ bin/python -m site sys.path [ /home/admin/venv, /usr/lib/python312.zip, /usr/lib/python3.12, /usr/lib/python3.12/lib-dynload, /home/admin/venv/lib/python3.12/site-packages, ] USER_BASE: /home/admin/.local (exists) USER_SITE: /home/admin/.local/lib/python3.12/site-packages (doesnt exist) ENABLE_USER_SITE: FalseCode Root所以对于Python程序而言当python程序加载主代码之后代码执行的结构可近似如下python解释器会定义一个绝对的逻辑根目录其下分别是包括入口代码文件的程序代码和实际分散在不同系统路径下的包这个逻辑根目录就是入口文件所在路径。Python/main.py/package/__init__.py/package/module.pyPackage Executionpython对包的设计主要是通过包下__init__.py实现包的导入此外为了扩展包从引用到可执行入口则通过包下__main__.py实现包的直接解释器执行python -m packagenode.js而对于node.js在web时代逐渐演化而来的编程语言和python相比运行时环境更加直接聚焦于项目级别解释器在系统级别环境共用但是包索引环境则弱化在Global和User的共享原生更支持直接不同项目维护自己的包索引环境项目本身也是包的组织形式类似于python和pip的关系node也有对应包管理工具npm一般会在项目文件夹使用“npm init”或者“npm init -y”来初始化node.js项目/包最主要的作用就是生成package.json 用来定义项目/包的信息入口文件运行依赖开发依赖以及脚本命令等。Local Level通过使用如下命令在本地项目安装依赖包npm install package-name包的安装位置就在本地项目文件夹下的node_modules里并且安装的依赖包都会记录到package.json中。查看本地路径和包列表的命令如下因为默认会把当前文件夹作为项目根目录所以显示的本地包索引地址就是当前目录下的node_modulesadminUbuntu:~$ npm root /home/admin/node_modules adminUbuntu:~$ npm listGlobal Level当然node.js也会有系统级别的包索引路径可通过如下命令在系统级别安装依赖包其路径是系统目录下的node_modules。npm install -g package-name查看全局路径和包列表的命令如下adminUbuntu:~$ npm root -g /usr/lib/node_modules adminUbuntu:~$ npm list -gPackage Path通过打印module.paths可以显示node对应包的索引路径优先级为本地目录以及逐级向上目录下的的node_modules为先然后是系统路径下的node_modulesadminUbuntu:~$ node Welcome to Node.js v20.19.6. Type .help for more information. console.log(module.paths) [ /home/admin/repl/node_modules, /home/admin/node_modules, /home/node_modules, /node_modules, /home/admin/.node_modules, /home/admin/.node_libraries, /usr/lib/node ]Code Root而对于node.js程序逻辑根目录是package.json所在的路径而入口文件可以在任意子目录本地的包索引路径就是在逻辑根目录下的node_modules系统级别的包索引路径是系统路径下的node_modules。node.js project/package/package.json/../index.js/node_modules/packagenode的执行逻辑会把当前路径作为逻辑根目录所以node.js的执行需要保证执行工作目录是package.json所在目录这点也是和python最大的不同。Package Execution每个node.js项目都会有package.json可以通过bin来定义可执行的入口npm进行安装的时候会进行脚本的生成和暴露这里的机制不在赘述但本质上也是拓展包除了引用之外可执行的功能。bin: { npm: bin/npm-cli.js, npx: bin/npx-cli.js },