问题
I install pyenv
on centos, and check if its working.
# curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
104 2099 104 2099 0 0 14121 0 --:--:-- --:--:-- --:--:-- 18575
Initialized empty Git repository in /root/.pyenv/.git/
remote: Counting objects: 4531, done.
remote: Compressing objects: 100% (1831/1831), done.
remote: Total 4531 (delta 3252), reused 3506 (delta 2419), pack-reused 0
Receiving objects: 100% (4531/4531), 1019.80 KiB, done.
Resolving deltas: 100% (3252/3252), done.
Initialized empty Git repository in /root/.pyenv/plugins/pyenv-doctor/.git/
remote: Counting objects: 18, done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 18 (delta 5), reused 14 (delta 4), pack-reused 0
Unpacking objects: 100% (18/18), done.
Initialized empty Git repository in /root/.pyenv/plugins/pyenv-installer/.git/
remote: Counting objects: 22, done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 22 (delta 4), reused 13 (delta 0), pack-reused 0
Unpacking objects: 100% (22/22), done.
Initialized empty Git repository in /root/.pyenv/plugins/pyenv-update/.git/
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 7 (delta 1), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (7/7), done.
Initialized empty Git repository in /root/.pyenv/plugins/pyenv-virtualenv/.git/
remote: Counting objects: 478, done.
remote: Compressing objects: 100% (309/309), done.
remote: Total 478 (delta 313), reused 271 (delta 144), pack-reused 0
Receiving objects: 100% (478/478), 259.55 KiB, done.
Resolving deltas: 100% (313/313), done.
Initialized empty Git repository in /root/.pyenv/plugins/pyenv-which-ext/.git/
remote: Counting objects: 20, done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 20 (delta 2), reused 14 (delta 1), pack-reused 0
Unpacking objects: 100% (20/20), done.
WARNING: seems you still have not added 'pyenv' to the load path.
# Load pyenv automatically by adding
# the following to ~/.bash_profile:
export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
[root@localhost ~]# export PATH="/root/.pyenv/bin:$PATH"
[root@localhost ~]# eval "$(pyenv init -)"
[root@localhost ~]# eval "$(pyenv virtualenv-init -)"
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# pyenv
pyenv 1.2.1
Usage: pyenv <command> [<args>]
Some useful pyenv commands are:
commands List all available pyenv commands
local Set or show the local application-specific Python version
global Set or show the global Python version
shell Set or show the shell-specific Python version
install Install a Python version using python-build
uninstall Uninstall a specific Python version
rehash Rehash pyenv shims (run this after installing executables)
version Show the current Python version and its origin
versions List all Python versions available to pyenv
which Display the full path to an executable
whence List all Python versions that contain the given executable
See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/pyenv/pyenv#readme
Installed new version python.
# pyenv install 2.7.13
Downloading Python-2.7.13.tar.xz...
-> https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz
Installing Python-2.7.13...
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
Installed Python-2.7.13 to /root/.pyenv/versions/2.7.13
Create virtualenv.
# pyenv virtualenv 2.7.13 myenv
Collecting virtualenv
Using cached virtualenv-15.1.0-py2.py3-none-any.whl
Installing collected packages: virtualenv
Successfully installed virtualenv-15.1.0
New python executable in /root/.pyenv/versions/2.7.13/envs/myenv/bin/python2.7
Also creating executable in /root/.pyenv/versions/2.7.13/envs/myenv/bin/python
Installing setuptools, pip, wheel...done.
Requirement already satisfied: setuptools in /root/.pyenv/versions/2.7.13/envs/myenv/lib/python2.7/site-packages
Requirement already satisfied: pip in /root/.pyenv/versions/2.7.13/envs/myenv/lib/python2.7/site-packages
When activate myenv
its working fine.
# pyenv activate myenv
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
(myenv) [root@localhost ~]# source deactivate
pyenv-virtualenv: deactivate 2.7.13/envs/myenv
When I use full path, then it gives error.
[root@localhost ~]# which pyenv
/root/.pyenv/bin/pyenv
[root@localhost ~]# /root/.pyenv/bin/pyenv activate myenv
Failed to activate virtualenv.
Perhaps pyenv-virtualenv has not been loaded into your shell properly.
Please restart current shell and try again.
I can use pyenv
for my testing, but when I have to use pyenv
in ansible
, I have to give full path as /root/.pyenv/bin/pyenv
.
回答1:
When using pyenv you need to reference the version that you are wanting to run. Try something like this:
/root/.pyenv/versions/myenv/bin/python
That is assuming your PYENV_ROOT
environment variable is set to /root/.pyenv/
When you execute python this way it is like activating the virtualenv, grabbing any installed libraries you had in the virtualenv as well.
Starting a fresh environment:
host:~ user$ pyenv virtualenv 2.7.12 myenv
Collecting virtualenv
Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB)
100% |████████████████████████████████| 1.8MB 744kB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-15.1.0
You are using pip version 8.1.1, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
New python executable in /Users/user/.pyenv/versions/2.7.12/envs/myenv/bin/python2.7
Also creating executable in /Users/user/.pyenv/versions/2.7.12/envs/myenv/bin/python
Installing setuptools, pip, wheel...done.
Ignoring indexes: https://pypi.python.org/simple
Requirement already satisfied (use --upgrade to upgrade): setuptools in /Users/user/.pyenv/versions/2.7.12/envs/myenv/lib/python2.7/site-packages
Requirement already satisfied (use --upgrade to upgrade): pip in /Users/user/.pyenv/versions/2.7.12/envs/myenv/lib/python2.7/site-packages
Activate the virtual environment and show that requests is not installed by default. Install it.
host:~$ pyenv activate myenv
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
(myenv) host:~ $ python
Python 2.7.12 (default, Dec 15 2016, 12:49:19)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named requests
>>>
(myenv) host:~$ pip install requests
Collecting requests
Downloading requests-2.18.4-py2.py3-none-any.whl (88kB)
100% |████████████████████████████████| 92kB 2.0MB/s
Collecting chardet<3.1.0,>=3.0.2 (from requests)
Downloading chardet-3.0.4-py2.py3-none-any.whl (133kB)
100% |████████████████████████████████| 143kB 4.0MB/s
Collecting certifi>=2017.4.17 (from requests)
Downloading certifi-2017.11.5-py2.py3-none-any.whl (330kB)
100% |████████████████████████████████| 337kB 3.0MB/s
Collecting urllib3<1.23,>=1.21.1 (from requests)
Downloading urllib3-1.22-py2.py3-none-any.whl (132kB)
100% |████████████████████████████████| 133kB 5.8MB/s
Collecting idna<2.7,>=2.5 (from requests)
Downloading idna-2.6-py2.py3-none-any.whl (56kB)
100% |████████████████████████████████| 61kB 7.0MB/s
Installing collected packages: chardet, certifi, urllib3, idna, requests
Successfully installed certifi-2017.11.5 chardet-3.0.4 idna-2.6 requests-2.18.4 urllib3-1.22
Show that it is now installed in the virtual env:
(myenv) host:~$ python
Python 2.7.12 (default, Dec 15 2016, 12:49:19)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>>
Deactivate and show that the default python is a different version:
(myenv) host:~$ pyenv deactivate
host:~$ python
Python 3.5.2 (default, Sep 21 2016, 15:26:09)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Run the myenv
virtualenv directly
host:~$ ~/.pyenv/versions/myenv/bin/python
Python 2.7.12 (default, Dec 15 2016, 12:49:19)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>>
来源:https://stackoverflow.com/questions/48287849/pyenv-virtualenv-activation-not-work-when-use-full-path