Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Virtualenvs中的断开引用_Python_Macos_Virtualenv_Homebrew_Dyld - Fatal编程技术网

Python Virtualenvs中的断开引用

Python Virtualenvs中的断开引用,python,macos,virtualenv,homebrew,dyld,Python,Macos,Virtualenv,Homebrew,Dyld,我最近在Mac电脑上安装了一堆点文件以及一些其他应用程序(我改为iTerm而不是Terminal,并将其升华为默认的文本编辑器),但从那以后,我所有的虚拟环境都停止了工作,尽管他们在.virtualenv中的文件夹仍然存在,并且每当我尝试在其中运行任何内容时,他们都会出现以下错误: dyld: Library not loaded: @executable_path/../.Python Referenced from: /Users/[user]/.virtualenvs/modclass

我最近在Mac电脑上安装了一堆点文件以及一些其他应用程序(我改为iTerm而不是Terminal,并将其升华为默认的文本编辑器),但从那以后,我所有的虚拟环境都停止了工作,尽管他们在.virtualenv中的文件夹仍然存在,并且每当我尝试在其中运行任何内容时,他们都会出现以下错误:

dyld: Library not loaded: @executable_path/../.Python
  Referenced from: /Users/[user]/.virtualenvs/modclass/bin/python
  Reason: image not found
Trace/BPT trap: 5
我已经删除了所有与dotfiles相关的文件,并将.bash_配置文件恢复到以前的状态,但问题仍然存在。是否有任何方法可以诊断问题或以简单的方式解决问题(例如,不需要重新创建所有VirtualNV)?

解决此问题的正确方法是运行

 pip install --upgrade virtualenv
使用自制软件升级python之后


对于任何安装python之类的东西的公式,这应该是一个通用过程,python有自己的包管理系统。安装
brew install python
时,需要安装
python
pip
easy\u install
virtualenv
等。因此,如果这些工具可以自我更新,最好在将自制视为问题的根源之前尝试这样做

这是在我从雪豹升级到MacOSX小牛时发生的。我也必须事先重新安装brew。希望您使用pip为您的项目运行冻结命令

要解决此问题,必须更新虚拟环境指向的路径

  • 使用brew安装python版本:
brew安装python

  • 重新安装VirtualNVRapper
pip安装--升级virtualenvwrapper

  • 已删除旧的虚拟环境:
rmvirtualenv old_项目

  • 创建新的虚拟环境:
mkvirtualenv新项目

  • 开发新的虚拟环境
workon新项目

  • 使用pip安装新项目的需求
pip安装-r requirements.txt


这将使项目保持原来的状态。

我找到了问题的解决方案,因此所有功劳都归作者所有

要点是,当您创建virtualenv时,许多符号链接会被创建到自制安装的Python

以下是一个例子:

$ ls -la ~/.virtualenvs/my-virtual-env
...
lrwxr-xr-x  1 ryan staff   78 Jun 25 13:21 .Python -> /usr/local/Cellar/python/2.7.7/Frameworks/Python.framework/Versions/2.7/Python
...
当您使用自制软件升级Python,然后运行
brew cleanup
时,virtualenv中的符号链接指向不再存在的路径(因为自制软件删除了这些路径)

符号链接需要指向新安装的Python:

lrwxr-xr-x  1 ryan staff   78 Jun 25 13:21 .Python -> /usr/local/Cellar/python/2.7.8_1/Frameworks/Python.framework/Versions/2.7/Python
解决方案是删除virtualenv中的符号链接,然后重新创建它们:

find ~/.virtualenvs/my-virtual-env/ -type l -delete
virtualenv ~/.virtualenvs/my-virtual-env
在删除链接之前,最好先检查哪些链接将被删除:

find ~/.virtualenvs/my-virtual-env/ -type l
在我看来,最好只删除断开的符号链接。您可以使用GNU
find

gfind ~/.virtualenvs/my-virtual-env/ -type l -xtype l -delete
如果您还没有GNU
find
,可以使用自制软件安装它:

brew install findutils

请注意,默认情况下,使用自制软件安装的GNU程序往往以字母
g
作为前缀。这是为了避免隐藏OS X附带的
查找
二进制文件。

在尝试了一些方法后,这对我来说很有效:

brew upgrade python3
转到virtualenv目录(但不要运行workon):

现在删除这些文件:

rm -rf .Python bin/python* lib/python2.7/* include/python2.7
然后,要重建venv,请运行:

virtualenv .
workon name_of_broken_venv
pip freeze

现在,您应该再次看到已安装软件包的列表。

更新版本
@Chris wedgewood
关于保留
站点软件包的回答(保留已安装的软件包)


被接受的答案对我来说并不适用:文件
$WORKON\u HOME/*/bin/python2.7
不再是一个符号链接,而是一个完整的可执行文件:

$ file $WORKON_HOME/*/bin/python2.7
/Users/sds/.virtualenvs/.../bin/python2.7: Mach-O 64-bit executable x86_64
...
唉,解决方案是完全删除并从头开始重新创建所有虚拟环境

供参考:

deactivate
pip install --user virtualenv virtualenvwrapper
pip install --user --upgrade virtualenv virtualenvwrapper
for ve in $(lsvirtualenv -b); do
  # assume that each VE is associated with a project
  # and the project has the requirements.txt file
  project=$(cat $WORKON_HOME/$ve/.project)
  rmvirtualenv $ve
  mkvirtualenv -a $project -r requirements.txt $ve
done
使用Python 2.7.10

一个命令
virtualenv路径到env
就可以实现这一点


如果您破坏了python3,请尝试为我修复它的
brew upgrade python3

如果这是由于升级了Python的
brew upgrade
造成的,并且您可以降级到以前的版本,请尝试
brew switch Python[以前的版本]
,例如
brew switch Python 3.6.5

我最近遇到了这个问题。上述解决方案对我都不起作用。看起来这实际上不是Python的问题。当我运行aws s3 ls时,出现了以下错误:

dyld:库未加载:@executable\u path/./.Python


这意味着,aws可执行文件所指向的库不存在或已损坏,因此我按照中的说明卸载并重新安装了aws cli,它工作了

简单地升级python3对我来说很有效:

brew upgrade python3

虚拟说唱者说明

正如公认的答案中所指出的,根本原因可能是自制更新,这意味着您的virtualenv符号链接指向断开的python路径-请参阅详细信息

对于每个虚拟环境,需要重新分配符号链接以指向正确的python路径(在brew Cell中)。下面是如何使用。这里我正在更新一个名为“我的示例环境”的虚拟环境


全部完成。

对我来说,修复它的方法是卸载python3和pipenv,然后重新安装它们

brew uninstall pipenv
brew uninstall python3
brew install python3 
brew install pipenv
对我(MacOS用户)来说,问题在于
brew
将Python和VirtualNVS链接更新到已删除的旧版本

我们可以用电脑检查和修理它

>> ls -al ~/.virtualenvs/<your-virtual-env>/.Python
.Python -> /usr/local/Cellar/python/<old-version>/Frameworks/Python.framework/Versions/3.7/Python
>> rm ~/.virtualenvs/<your-virtual-env>/.Python
>> ln -s  /usr/local/Cellar/python/<new-version>/Frameworks/Python.framework/Versions/3.7/Python ~/.virtualenvs/<your-virtual-env>/.Python
>ls-al~/.virtualenvs/.Python
.Python->/usr/local/ceral/Python//Frameworks/Python.framework/Versions/3.7/Python
>>rm~/.virtualenvs//.Python
>>ln-s/usr/local/ceral/python//Frameworks/python.framework/Versions/3.7/python~/.virtualenvs/.python

我尝试了前几种方法,但对我来说,它们不起作用,它们试图让tox起作用。最终奏效的是
cd ~/PYTHON_ENVS
find ./my-example-env -type l -delete
mkvirtualenv my-example-env
brew uninstall pipenv
brew uninstall python3
brew install python3 
brew install pipenv
>> ls -al ~/.virtualenvs/<your-virtual-env>/.Python
.Python -> /usr/local/Cellar/python/<old-version>/Frameworks/Python.framework/Versions/3.7/Python
>> rm ~/.virtualenvs/<your-virtual-env>/.Python
>> ln -s  /usr/local/Cellar/python/<new-version>/Frameworks/Python.framework/Versions/3.7/Python ~/.virtualenvs/<your-virtual-env>/.Python
sudo pip install tox
Successfully built filelock
Installing collected packages: py, pluggy, toml, filelock, tox
Successfully installed filelock-3.0.10 pluggy-0.11.0 py-1.8.0 toml-0.10.0 tox-3.9.0
rm -rf `pipenv --venv` # remove the broken venv
pipenv install --dev   # reinstall the venv from pipfile 
mkvirtualenv env_to_fix
find myvirtualenv -type l -delete
virtualenv myvirtualenv