6

python学习之virtualenv&pip&namespace

 1 year ago
source link: https://blog.shareworld.vip/archives/irtualenvpipnamespace
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

继续python进阶学习

virtualenv

虚拟环境变量,virtualenv 本身是一个工具,命令行工具
通过 pip install virtualenv 安装

pip是一个package管理工具,有点java maven、node webpack & npm &yarn。和npm非常像。

virtualenv 目的是在你工程目录下创建一个独立的python命令及相关命令库,同时把依赖的第三方包都房主工程目录下统一管理。也就是每个project的运行环境独立了,用java的体系来讲就是每个project有个自己的jdk和三方jar库。这个也和前端工程目录结构类似,node_modules 就是跟工程走,而不是全局的,因为每个工程对用的package有自己的版本诉求。

  • my_project
    ├── src
    ├── tests
    └── venv
    • ├── Scripts
      └── Lib
      • └── site-packages

这里的site-package就是三分包安装目录。通过 pip install package_name安装。

  1. 工程内的site-packages和全局python/Lib下的site-packages存在依赖继承关系。理论是工程内先读取自己虚拟环境内,此前读取全局,这块具体什么个机制没有多少文档加以指导。
  2. 开启虚拟环境是,package并没有理想的安装在虚拟目录site-packages下,反而安装在全局,这块也没找到多少文档指导。

pycharm 和 cmd 两种方式都试了virtualenv机制,同时测试 --system-site-packages 参数,都不太好用。少数情况下安装在虚拟目录中,大多安装在全局目录下,这块问题待后续慢慢查找吧。要么理论没学好(文档少),要么python自身bug。

class namespace

类机制作为一个高级语言是必备支持能力,就是面向对象编程理论。python也不例外的支持class。学习class就得学习命名空间和变量作用域,这个一定得懂,不然看不懂代码。

官网给了一段code,非常准确的描述了作用域关系。

def scope_test(): def do_local(): spam = "local spam" def do_nonlocal(): nonlocal spam spam = "nonlocal spam" def do_global(): global spam spam = "global spam" spam = "test spam" do_local() print("After local assignment:", spam) do_nonlocal() print("After nonlocal assignment:", spam) do_global() print("After global assignment:", spam)scope_test()print("In global scope:", spam)

运行结果:

After local assignment: test spamAfter nonlocal assignment: nonlocal spamAfter global assignment: nonlocal spamIn global scope: global spam

原理(看懂这个,跨一大步):
局部 赋值(这是默认状态)不会改变 scope_test 对 spam 的绑定。 nonlocal 赋值会改变 scope_test 对 spam 的绑定,而 global 赋值会改变模块层级的绑定。

如conda 工具值 anaconda、miniconda的使用,和pip&virtualenv是一样的。

学海无涯,逆行而上。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK