Python 安装 pipenv之后无法找到路径
判断自己所用的命令行工具
mac设置全局环境变量_mac添加全局变量_芽儿C的博客-CSDN博客
echo $SHELL 如果返回/bin/zsh 表示是zsh;返回/bin/bash表示是bash
所以输入:
bash
dcl@MacdeMacBook-Air ~ % echo $SHELL
/bin/zsh
dcl@MacdeMacBook-Air ~ %
故应为 zsh
博主讲到:zsh对应的配置文件是zsh_profile
在以上连接的下方,这个网友的评论告诉:不是.zsh_profile,是.zshrc
所以修改.zshrc 里面的文件内容为
bash
export HOMEBREW_PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple #ckbrew
export HOMEBREW_API_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api #ckbrew
export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles #ckbrew
# export PATH="/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages:$PATH"
export PATH="/Library/Frameworks/Python.framework/Versions/3.11/bin:$PATH"
eval $(/opt/homebrew/bin/brew shellenv) #ckbrew
不能添加
bash
export PATH="/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages:$PATH"
这个路径指向 Python 库的位置,而不是可执行文件的位置。pipenv 命令通常安装在 Python 的 bin 目录中,而不是 lib 目录。
正确的路径:
bash
bashCopy code
export PATH="/Library/Frameworks/Python.framework/Versions/3.11/bin:$PATH"
这个路径指向 Python 的 bin 目录,这是包含可执行文件(例如 pipenv )的地方。通过将这个路径添加到 PATH 中,你可以在终端中直接运行 pipenv。
保存文件并重新启动终端,或者使用 source ~/.zprofile 以使更改生效
常用 nano 命令
删除整行:Ctrl+k
问题背景
在使用 MacBook M1 运行一些 github 上面的项目时候,遇到系统提示不是 x86 安装环境。之后无法正常打开运行,安装x86 包也不行,使用arch命令查看到一直显示的是 arm64 。
我的想法:创建一个基于 x86 架构的 python 环境,但是我按照网络方法创建了,还是 arm64。
报错内容:
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/_libs/interval.cpython-39-darwin.so, 0x0002): tried: '/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/_libs/interval.cpython-39-darwin.so' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')), '/System/Volumes/Preboot/Cryptexes/OS/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/_libs/interval.cpython-39-darwin.so' (no such file), '/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/_libs/interval.cpython-39-darwin.so' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64'))
问题原因
这个报错表示您的 Python 程序在导入 pandas 库时遇到了一个问题。具体来说,程序无法加载位于 /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/_libs/interval.cpython-39-darwin.so 路径下的 interval 模块,因为该模块的架构与当前的处理器架构不兼容。
更具体地说,您的程序似乎是在 M1 MacBook 上运行,因此它使用的处理器架构是 arm64。然而,interval 模块是为 x86_64 架构编译的,因此无法在 arm64 架构的机器上运行。
解决这个问题的方法是使用 x86_64 架构的 Python 环境。您可以按照之前的回答中所述的步骤来创建 x86_64 虚拟环境,并在其中安装 pandas 库和其他所需的包。这样,您的程序就可以在 x86_64 架构下运行,并且可以成功加载 interval 模块。
解决方案
在当前虚拟环境下,**不管是 arm 还是 x86,也不管包是 arm 的包,还是 x86 的包。**如果需要使用 x86 环境运行 python,直接使用命令
bash
arch -x86_64 python xxx.py
这就表示 python 是在 x86 架构下启动的,针对 MacBook 来说,当在 M1 芯片的上运行 x86 架构的应用程序时,系统会自动启动 Rosetta 2 软件,该软件会将 x86 架构的代码翻译成 M1 架构的代码,以便在 M1 芯片上运行。
这样造成的结果有一些问题,就是这个程序,你既安装了 arm 又需要 x86 这种情况下,一般执行**arch -x86_64**就是可以的。但是也可能会遇到一些兼容问题。
来自 ChatGPT:Rosetta 2 软件是将 x86 的机器码转换成为 arm 的机器码,以便在 M1 芯片上执行。也就是说,当您在 M1 Mac 上运行 x86 程序时,Rosetta 2 将会接管这个程序,并将它的 x86 机器码转换成为 M1 芯片可以理解的 arm 机器码,然后再交给 M1 芯片来执行。这样可以保证 x86 程序在 M1 Mac 上的兼容性,同时也能够获得 M1 芯片带来的性能优势。
/Users/dongqinuo/.local/share/virtualenvs
Mac 创建一个虚拟环境
1、使用命令 pipenv shell 创建一个虚拟环境
2、运行
问:如果我在当前目录下使用 pipenv shell 是不是就根据当前文件夹的名字创建了一个虚拟环境
是的,当你在当前目录下使用
pipenv shell命令时,会创建一个以当前文件夹名字命名的虚拟环境,并激活该虚拟环境。这意味着你可以在该虚拟环境下安装和运行你的项目所需的所有依赖项,而不会影响你的全局 Python 环境。
问:那我需要把我的代码导入到这个目录里面吗
不一定需要把你的代码导入到这个目录里面。当你使用
pipenv shell命令进入虚拟环境后,你可以在终端中切换到你的代码所在的目录,并在该目录下运行你的代码。虚拟环境会自动使用你在该目录下安装的依赖项来运行你的代码。如果你想把你的代码放在虚拟环境的目录下,你可以把你的代码复制或移动到虚拟环境的目录中。这样做的好处是,你的代码和虚拟环境的依赖项在同一个目录下,更加清晰和便于管理。但是,这并不是必须的。
问:哦哦。意思就是说,我其实只是使用了这个环境,就好比使用我的计算机上的环境而不一定要把代码包导入到我的系统 python 环境里面去。我理解的对吗
您的理解是正确的。使用
pipenv shell命令进入虚拟环境后,您可以在终端中切换到您的代码所在的目录,并在该目录下运行您的代码。虚拟环境会自动使用您在该目录下安装的依赖项来运行您的代码。这样,您就可以在虚拟环境中独立地管理您的项目和依赖项,而不会影响您的全局 Python 环境。
命令
- 创建虚拟环境:
pipenv install- 这个命令会在当前目录下创建一个新的虚拟环境,并在该虚拟环境中安装 Pipfile 文件中列出的所有依赖项。
- 安装依赖项:
pipenv install <package>- 这个命令会在当前虚拟环境中安装指定的依赖项。如果您没有指定版本号,则默认安装最新版本。
- 卸载依赖项:
pipenv uninstall <package>- 这个命令会从当前虚拟环境中卸载指定的依赖项。
- 列出所有依赖项:
pipenv graph- 这个命令会列出当前虚拟环境中所有安装的依赖项及其依赖关系。
- 激活虚拟环境:
pipenv shell- 这个命令会激活当前目录下的虚拟环境,并将您切换到虚拟环境的 shell 中。
- 退出虚拟环境:
exit- 这个命令会退出当前虚拟环境的 shell,返回到您的系统 shell 中。
除了上面列出的命令,pipenv 还有其他很多命令,如 pipenv run 、pipenv lock 、pipenv check 等。您可以通过运行 pipenv --help 命令来查看所有可用的命令及其用法。
关于 Pipfile 文件
用文字描述一下pipenv shell命令的流程:
- 首先,pipenv shell命令会在当前目录下查找Pipfile文件。
- 如果Pipfile文件存在,就会激活对应的虚拟环境,并生成一个新的shell,此shell即处于虚拟环境激活状态。
- 如果Pipfile文件不存在,就会创建一个新的虚拟环境,并生成一个新的shell,此shell即处于虚拟环境激活状态。同时,也会在当前目录下生成一个Pipfile文件和一个Pipfile.lock文件。
- 在虚拟环境激活状态下,可以用pipenv install命令来安装第三方包,并记录在Pipfile和Pipfile.lock文件中。也可以用pipenv run python xx.py来执行python文件。
- 退出虚拟环境激活状态时,可以用exit命令或者Ctrl+D键。
Pipfile 文件是 pipenv 工具使用的一种文件格式,用于指定 Python 项目所需的依赖项和版本信息。它类似于 requirements.txt 文件,但更加灵活和易于使用。您可以使用 Pipfile 文件来指定您的项目所需的 Python 版本、安装的依赖项及其版本信息、开发依赖项等。
Pipfile 文件通常包含两个部分:[packages] 和 [dev-packages] 。[packages]
问:requirements.txt 文件不是就包括了这些内容吗?
部分用于指定项目所需的依赖项,包括名称和版本号,例如:
是的,
requirements.txt文件也可以用来指定 Python 项目所需的依赖项和版本信息,和Pipfile文件类似。但是,requirements.txt文件的格式比较简单,只能指定依赖项的名称和版本号,不能指定其他信息,如开发依赖项等。相比之下,
Pipfile文件更加灵活和易于使用,可以指定依赖项的名称、版本号、仓库源、Python 版本、开发依赖项等信息。使用Pipfile文件可以使您的项目更加清晰和易于管理,而且pipenv工具可以自动根据Pipfile文件来创建和管理虚拟环境,使您的依赖项更加独立和可靠。不过,如果您已经有了一个
requirements.txt文件,并且不想迁移到Pipfile文件,也可以使用pipenv工具来创建和管理虚拟环境。在使用pipenv工具时,它会自动读取和解析requirements.txt文件,并在虚拟环境中安装所需的依赖项。
第三次理解虚拟环境 pipenv
遇到的问题
已经使用 pipenv install geopy 安装了 python 的软件包,但是导入环境包到代码编辑器,为什么在 vscode 编辑器里面还是会显示报错

问题经过
如果使用 pip install geopy 安装则不会报错。
使用 pip 命令安装是将这个包安装在了电脑本地的 python 环境的包里面
bash
/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages
而是用pipenv install geopy则是将这个安装包安装在了,我们目前激活的虚拟环境下的 python 环境的包里面。
bash
/Users/dongqinuo/.local/share/virtualenvs/flask打卡-sWNw9Qlz/lib/python3.9/site-packages
这个就是使用 pipenv 创建的虚拟环境的位置

问题原因
vscode 编辑器使用的语法检查原理,是默认调用系统的 python 包进行检查。而我们是把包安装在了我们的虚拟环境中,当然这个错误一直就是会有的。
解决这个问题也很简单,把 vscode 里面的 python 的语法检查配置到虚拟环境包就好了。
切换 vscode 不同的 python
command + p 打开配置终端
输入:>

之后选择不同的python 环境

是什么?
Pipenv是基于pip的Python包管理工具
在Python中,虚拟环境(virtual enviroment)就是隔离的Python解释器环 境。
干什么?
可以拥有一个独立的Python解释器环境。这样做的好处 是可以为每一个项目创建独立的Python解释器环境,因为不同的项目常常会依赖不 同版本的库或Python版本。
虚拟环境通常使用Virtualenv来创建,但是为了更方便地管理虚拟环境和依赖 包,我们将会使用集成了Virtualenv的Pipenv。
怎么干?
当前工作目录
使用 pipenv install 创建虚拟环境
这会为当前项目创建一个文件夹,其中包含隔离的Python解释器环境,并且安 装pip、wheel、setuptools等基本的包。
位置在哪儿?
创建的位置:在Windows系统中,虚拟环境 文件夹会在C\Users\Administrator\.virtualenvs\目录下。而Linux或 macOS会在~/.local/share/virtualenvs/目录下创建。
在项目目录内创 建虚拟环境文件夹,可以设置环境变量PIPENV_VENV_IN_PROJECT,这时名 为.venv的虚拟环境文件夹将在项目根目录被创建。
虚拟环境文件夹的目录名称的形式为"当前项目目录名+一串随机字符",比如 helloflask-5Pa0ZfZw。

激活与退出环境
pipenv shell
exit
特殊情况:在Windows系统中使用pipenv shell激活虚拟环境时,虽然激活成功,但是命 令行提示符前不会显示虚拟环境名称。
Pipfile 是什么?
在这个问题之前,我们先搞清楚 requirements.txt 是什么?
ini
alembic==1.4.2
blinker==1.4
bootstrap-flask==1.2.0
click==7.1.1
flask==1.1.2
itsdangerous==1.1.0
jinja2==2.11.1
wtforms==2.2.1
# dev
coverage==5.0.4
pycodestyle==2.5.0
pyflakes==2.1.1
python-dateutil==2.8.1
six==1.14.0
text-unidecode==1.3
watchdog==0.10.2
一个程序通常会使用很多的Python包,即依赖(dependency)。
程序不仅仅 会在一台电脑上运行,程序部署上线时需要安装到远程服务器上,而你也许会把它 分享给朋友。
在以前我们通常使用pip搭配一个 requirements.txt文件来记录依赖。但requirements.txt需要手动维护,在使用 上不够灵活。Pipfile的出现就是为了替代难于管理的requirements.txt。
在创建虚拟环境时,如果项目根目录下没有Pipfile文件,pipenv install命 令还会在项目文件夹根目录下创建Pipfile和Pipfile.lock文件,前者用来记录项 目依赖包列表,而后者记录了固定版本的详细依赖包列表。当我们使用Pipenv安 装/删除/更新依赖包时,Pipfile以及Pipfile.lock会自动更新。
查看环境
使用pipenv graph命令查看当前环境下的依赖情况
在虚拟环境中 使用pip list命令查看依赖列表。
当需要在一个新的环境运行程序时,只需要执行pipenv install命令。 Pipenv就会创建一个新的虚拟环境,然后自动从Pipfile中读取依赖并安装到新创 建的虚拟环境中。
虚拟环境里面安装 flask
pipenv install flask