参考

环境

Mac

Python环境

virtualenv 用于解决环境依赖而存在,通过 virtualenv 命令可以生成项目的独立依赖环境。

如果本地有多个版本的Python,需要对不同版本的Python单独安装virtualenv。

不清楚管理多个版本Python的,可以参考我的另一篇Mac管理多版本Python

安装virtualenv

不久之前,重装了系统,发现system下的Python(系统自带的版本)默认没有安装pip

wuxiaoxindeMac-mini:~ wuxiaoxin$ pyenv versions

* system (set by /Users/wuxiaoxin/.pyenv/version)

3.7.4

wuxiaoxindeMac-mini:~ wuxiaoxin$ pip -V

pyenv: pip: command not found

The `pip' command exists in these Python versions:

3.7.4

先安装下pip,终端下执行:

sudo easy_install pip

安装完毕如下:

...

Installed /Library/Python/2.7/site-packages/pip-19.2.2-py2.7.egg

Processing dependencies for pip

Finished processing dependencies for pip

wuxiaoxindeMac-mini:~ wuxiaoxin$ pip -V

pip 19.2.2 from /Library/Python/2.7/site-packages/pip-19.2.2-py2.7.egg/pip (python 2.7)

安装virtualenv

pip install virtualenv

出现这样的警告:

DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support

说是Python 2.7将于2020年1月1日结束它的生命。。。

看来Python3大势已定。

$ pip install virtualenv

Collecting virtualenv

Using cached https://files.pythonhosted.org/packages/7e/1b/6c00d57127608793e16e8b7f813e64d58a1938505c42fe190d1386ab41e1/virtualenv-16.4.0-py2.py3-none-any.whl

Installing collected packages: virtualenv

Successfully installed virtualenv-16.4.0

如果出现这样的错误:

ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/virtualenv.pyc'

Consider using the --user option or check the permissions.

应该是权限问题,根据提示加上--user试试。

pip install virtualenv --user

安装成功:

Successfully installed virtualenv-16.7.2

查看当前Python版本:system ,已经安装的库:

pip list

$ pip list

Package Version

-------------------------------------- --------

altgraph 0.10.2

bdist-mpkg 0.5.0

bonjour-py 0.3

macholib 1.5.1

matplotlib 1.3.1

modulegraph 0.10.4

numpy 1.8.0rc1

pip 19.2.2

py2app 0.7.3

pyobjc-core 2.5.1

pyobjc-framework-Accounts 2.5.1

pyobjc-framework-AddressBook 2.5.1

pyobjc-framework-AppleScriptKit 2.5.1

pyobjc-framework-AppleScriptObjC 2.5.1

pyobjc-framework-Automator 2.5.1

pyobjc-framework-CFNetwork 2.5.1

pyobjc-framework-Cocoa 2.5.1

pyobjc-framework-Collaboration 2.5.1

pyobjc-framework-CoreData 2.5.1

pyobjc-framework-CoreLocation 2.5.1

pyobjc-framework-CoreText 2.5.1

pyobjc-framework-DictionaryServices 2.5.1

pyobjc-framework-EventKit 2.5.1

pyobjc-framework-ExceptionHandling 2.5.1

pyobjc-framework-FSEvents 2.5.1

pyobjc-framework-InputMethodKit 2.5.1

pyobjc-framework-InstallerPlugins 2.5.1

pyobjc-framework-InstantMessage 2.5.1

pyobjc-framework-LatentSemanticMapping 2.5.1

pyobjc-framework-LaunchServices 2.5.1

pyobjc-framework-Message 2.5.1

pyobjc-framework-OpenDirectory 2.5.1

pyobjc-framework-PreferencePanes 2.5.1

pyobjc-framework-PubSub 2.5.1

pyobjc-framework-QTKit 2.5.1

pyobjc-framework-Quartz 2.5.1

pyobjc-framework-ScreenSaver 2.5.1

pyobjc-framework-ScriptingBridge 2.5.1

pyobjc-framework-SearchKit 2.5.1

pyobjc-framework-ServiceManagement 2.5.1

pyobjc-framework-Social 2.5.1

pyobjc-framework-SyncServices 2.5.1

pyobjc-framework-SystemConfiguration 2.5.1

pyobjc-framework-WebKit 2.5.1

pyOpenSSL 0.13.1

pyparsing 2.0.1

python-dateutil 1.5

pytz 2013.7

scipy 0.13.0b1

setuptools 18.5

six 1.4.1

virtualenv 16.7.2

xattr 0.6.4

新建一个文件夹test,test作为工程文件夹,在该文件夹中创建venv环境。

使用virtualenv命令,可以自动创建venv环境。

可以发现virtualenv已经安装,但是会提示无此命令:

wuxiaoxindeMac-mini:7 wuxiaoxin$ virtualenv --no-site-packages venv

-bash: virtualenv: command not found

可以再执行一次安装命令,终端会提示virtualenv的安装路径:

pip install virtualenv

Requirement already satisfied: virtualenv in /Users/wuxiaoxin/Library/Python/2.7/lib/python/site-packages (16.7.2)

顺着这条路径

/Users/wuxiaoxin/Library/Python/2.7/lib/python/site-packages

可以找到virtualenv命令文件所在路径

/Users/wuxiaoxin/Library/Python/2.7/bin/virtualenv

这个命令virtualenv可以成功执行。至于为什么安装后不会自动设置环境变量,原因不详。

这时候有两种方式可以尝试下

将命令所在路径加载到 PATH

可以通过修改.bash_profile文件来实现,open ~/.bash_profile

export VIRTUALENV_PATH=/Users/wuxiaoxin/Library/Python/2.7/bin

export PATH=$VIRTUALENV_PATH:$PATH

重启终端,查看PATH,发现路径已经成功加到PATH

wuxiaoxindeMac-mini:~ wuxiaoxin$ echo $PATH

/Users/wuxiaoxin/Library/Python/2.7/bin:/Users/wuxiaoxin/.pyenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

测试成功:

$ virtualenv

You must provide a DEST_DIR

Usage: virtualenv [OPTIONS] DEST_DIR

Options:

--version show program's version number and exit

... (此处省略后面内容)

设置命令的软连接

如果不通过修改.bash_profile达到设置PATH的话。可以直接设置软连接,其实就是将命令拷贝一个替身到/usr/local/bin下。

ln –s 源文件 目标文件

ln -s /Users/wuxiaoxin/Library/Python/2.7/bin/virtualenv /usr/local/bin/virtualenv

这里其实不需要考虑Python版本问题,virtualenv命令已经限定了Python版本。

如果你将.bash_profile中关于virtualenv的路径设置注释掉,重启终端,再执行virtualenv,会发现:

wuxiaoxindeMac-mini:~ wuxiaoxin$ pyenv versions

* system (set by /Users/wuxiaoxin/.pyenv/version)

3.7.4

wuxiaoxindeMac-mini:~ wuxiaoxin$ virtualenv

pyenv: virtualenv: command not found

The `virtualenv' command exists in these Python versions:

3.7.4

wuxiaoxindeMac-mini:~ wuxiaoxin$ pyenv global 3.7.4

wuxiaoxindeMac-mini:~ wuxiaoxin$ python -V

Python 3.7.4

wuxiaoxindeMac-mini:~ wuxiaoxin$ virtualenv

You must provide a DEST_DIR

Usage: virtualenv [OPTIONS] DEST_DIR

Options:

--version show program's version number and exit

...(此处省略后面内容)

现在可以正常使用了:

wuxiaoxindeMac-mini:test wuxiaoxin$ virtualenv --no-site-packages venv

New python executable in /Users/wuxiaoxin/Desktop/test/venv/bin/python

Installing setuptools, pip, wheel...

done.

test项目独立依赖环境

加上了参数--no-site-packages,这样,已经安装到系统Python环境中的所有第三方包都不会复制过来,这样,我们就得到了一个不带任何第三方包的“干净”的Python运行环境。

实测不加这么个参数,直接执行virtualenv venv也是一样的效果呢。

如何知道?启动该虚拟环境,在该环境下pip list即可一目了然。

比如我的一个虚拟环境安装在这个路径下:

/Users/vampire/Desktop/test3/venv

那么可以这样启动虚拟环境:

source /Users/vampire/Desktop/test3/venv/bin/activate

如图,已经启动虚拟环境:

已经进入虚拟环境.jpg

如下,test3中使用参数--no-site-packages,test4中不使用参数--no-site-packages,实测可以看出,--no-site-packages参数加上和不加上,效果一样:

效果一样.jpg

只有一种可能,--no-site-packages是默认参数。

终端下执行virtualenv可以看到:

果然--no-site-packages是默认参数.jpg

那么 --system-site-packages 就是它的对立参数了,测试下:

全局依赖参数.jpg

可以看到,安装在系统的Python环境中的库,也复制到这个虚拟环境中来了。

还需要注意的是这个参数:

-p PYTHON_EXE, --python=PYTHON_EXE

The Python interpreter to use, e.g.,

--python=python3.5 will use the python3.5 interpreter

to create the new environment. The default is the

interpreter that virtualenv was installed with

(/usr/bin/python)

可以看出,执行virtualenv命令生成的虚拟环境,默认是依据

/usr/bin/python目录下的Python环境。其实也就是当前安装virtualenv所属的Python的版本。

当前电脑下有两个Python环境:

wuxiaoxindeMac-mini:test1 wuxiaoxin$ pyenv versions

* system (set by /Users/wuxiaoxin/.pyenv/version)

3.7.4

如果这样执行命令,会怎样?

wuxiaoxindeMac-mini:test1 wuxiaoxin$ virtualenv --python=python3.7 venv

Running virtualenv with interpreter /Users/wuxiaoxin/.pyenv/shims/python3.7

pyenv: python3.7: command not found

The `python3.7' command exists in these Python versions:

3.7.4

如果是这样限制的话,需要创建源自python3.7.4版本的依赖环境,直接使用pyenv进行切换即可,virtualenv不需要带这个参数--python了。

终端下进入和退出venv虚拟环境:

假设一个新的venv虚拟环境所在的目录如下:

/Users/vampire/Desktop/test/venv

venv目录中包含如下文件夹:

bin

include

lib

而该入口文件正是处于bin文件中的activate文件,那么进入虚拟环境的命令如下:

source /Users/vampire/Desktop/test/venv/bin/activate

退出虚拟环境的命令:

deactivate #这个是全局的命令,任何路径下执行都行

venv环境下安装库

终端下先进入该venv环境,再执行pip install 安装。

venv下安装库.png

关于 venv 移动位置

一般我们使用virtualenv的目的是为了让一个工程拥有独立的依赖环境。

我们会把virtualenv生成的环境venv放置在工程路径下。

如果我们移动了这个工程的路径,venv路径也会随之改变,因此注意修改这个命令文件

activate,打开这个文件,你会发现其实就是bash shell脚本,该命令的路径也固定写在其中:

venv路径

因此一旦移动venv,记得修改venv/bin/activate文件中的路径。如果是复制了venv,也需要对复制venv的venv/bin/activate文件中的路径,原venv/bin/activate保持不变。

怎么进入python 的venv文件夹_mac下Python关于venv 的使用相关推荐

  1. github船舰新文件夹_mac下搭建hexo+github

    在这之前,网络上有很多教程,但是还是基于自己遇到的问题和流程写一下.因为自己是小白,所以在过程中遇到了很多小白的问题.这里简单说明 一.安装 首先,需要安装node.js.npm和Git Git可直接 ...

  2. python读取数据文件夹_使用python依次读取文件中的所有csv格式的数据

    使用python依次读取文件中的所有csv格式的数据: #coding=gbk import pandas as pd import os path = r'D:\ml_datasets\PHM\c6 ...

  3. macbook python文件路径_mac下python目录

    python和pip需要配合一起使用,python版本两个以上就经常乱,整理一下! 查询python执行文件位置: Chaim:~ Chaim$ type python python is hashe ...

  4. python生成多级文件夹_利用 python 遍历多级文件夹处理不同文件

    需求:近期,同事在处理文件的时候,常常需要从一堆文件中提取一些数据信息: 分析:由于每个文件夹下面的文件或文件夹多如牛毛,文件类型也很多种,需要针对不同文件类型做处理,人工处理是不现实的,只能用脚本处 ...

  5. mac系统python读取文件路径_mac下python目录

    经常碰到安装成功但调用不成功,可能都是装错地方了,可以直接命令行python2.7或python2.6执行. 查看python位置: Chaim:texas2016 Chaim$ which pyth ...

  6. python判断是不是文件夹_Python判断文件和文件夹是否存在的方法

    一.python判断文件和文件夹是否存在.创建文件夹 复制代码代码如下: >>> import os >>> os.path.exists("d:/ass ...

  7. Python监控目录文件夹,并使用SFTP上传目录及文件到linux服务器

    Python 扫描监控本地文件夹并进行超大文件上传 方案1:WebUploader大文件分块多线程并发上传 方案2:watchdog目录文件夹监控,paramiko STFP上传服务器 方案3:优化2 ...

  8. python读取一个文件夹/子文件夹下的所有文件名字

    python读取一个文件夹/子文件夹下的所有文件名字 示例代码: import osfile_path = './images/' all_file_name = os.listdir(file_pa ...

  9. Python递归获取文件夹下面所有文件名字:

    Python递归获取文件夹下面所有文件名字: def getAllFiles(targetDir):files = []listFiles = os.listdir(targetDir)for i i ...

最新文章

  1. 王者服务器维护什么时间结束s22,王者荣耀s22赛季结束时间 s22赛季什么时候结束?[多图]...
  2. 【学习笔记】mybatis自定义插件案例代码
  3. Spring 事务core 模块-JdbcTeamplate 对象
  4. Linux下使用g++编译C++程序——Compiling Cpp
  5. linux部署的java应用,浏览器访问时,报域名解析错误
  6. idea关闭当前项目
  7. Comcast Xfinity家庭安全系统被曝严重漏洞
  8. Windows系统管理和网络服务笔记生涯 源于BENET2.0课程(S2)
  9. php html页面显示乱码怎么解决方法,html网页乱码原因以及解决办法
  10. 谷歌服务框架_谷歌服务框架下载_谷歌服务框架全版本整理
  11. Goolgle10个搜索技巧
  12. 「笔耕不辍」常见远程调用协议
  13. Softing pnGate系列网关:将PROFIBUS总线集成到PROFINET网络
  14. 电烙铁使用方法总结集合
  15. 2017年的错误和失误
  16. “爱拍照”的OPPO逆袭战:合并一加,跑步造车
  17. 计算机屏幕纵向显示如何改,电脑桌面纵向怎么设置
  18. 3D游戏设计-模型与动画
  19. 企业搭建APP怎么正确选择云服务器配置?
  20. 网站SEO优化基本流程是什么?看完就明白了!

热门文章

  1. Android 支付宝 微信 银联 支付
  2. psutil模块简说
  3. word如何设置长宽高_word页面高度和宽度怎么设置
  4. 基于tensorflow-gpu + E5 CPU + GTX1660 SUPER + TESLA-P40 显卡 安装CUDA(11.8.0)
  5. 《Linux是怎样工作的》读书笔记
  6. 7-3 sdut-sel-while-1 社会主义核心价值观之理解与输出 (20 分)
  7. 巧用 chrome 浏览器的开发者工具解决sdk问题
  8. 今天收到一条诈骗短信!
  9. Python学习笔记·
  10. KNN(K最近邻)分类算法_糖潮丽子的博客