相关疑难解决方法(0)

854
推荐指数
18
解决办法
81万
查看次数

venv,pyvenv,pyenv,virtualenv,virtualenvwrapper,pipenv等有什么区别?

Python 3.3在其标准库中包含了新包venv.它做了什么,它与所有其他似乎与正则表达式相匹配的包有什么不同(py)?(v|virtual|pip)?env

python virtualenv virtualenvwrapper python-venv pyenv

800
推荐指数
6
解决办法
16万
查看次数

为什么virtualenv从我的shell继承$ PYTHONPATH?

所以我在Ubuntu 14.04机器上将我的所有工具从python2迁移到python3.4.到目前为止,我已经完成了以下工作:

  1. 在我的zshrc中为我的用户使用python到python3
  2. 在系统本身上安装了pip3(但我只是将virtualenvs用于所有内容,所以我不会真正使用它)
  3. 改变了我的virtualenvwrapper"make"别名mkvirtualenv --python=/usr/bin/python3('workon'在下面被调用为'v')

现在好奇,你可以清楚地看到它,从virtualenv激活的环境运行python3仍然继承我的$ PYTHONPATH,它仍然为我所有的python2路径设置.这在我的virtualenv中安装/运行程序时会造成严重破坏,因为python3路径显示在旧的python2路径之后,因此python2模块首先在我的程序中导入.在启动virtualenv之前将我的$ PYTHONPATH取消为''修复此问题并且我的程序按预期启动.但我的问题是:

  1. 在virtualenvs中这个$ PYTHONPATH的继承是正常的吗?这不是打败了整个目的吗?
  2. 当python已经在内部处理它自己的路径时,为什么将$ PYTHONPATH设置为shell中的env-var?
  3. 我正确使用$ PYTHONPATH吗?我应该只在我的'zshrc'中设置它以仅列出我的个人添加物($ HOME/dev)而不是冗余的'/ usr/local/lib /'位置?
  4. 在调用它们之前,我可以非常轻松地导出备用python3路径以供我的virtualenvs使用,并在完成后重置它们,但这是解决此问题的最佳方法吗?
    ? echo $PYTHONPATH
    /usr/local/lib/python2.7/site-packages:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/home/brian/dev

    brian@zeus:~/.virtualenvs
    ? python2
    Python 2.7.6 (default, Mar 22 2014, 22:59:56)
    [GCC 4.8.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import sys, pprint
    >>> pprint.pprint(sys.path)
    ['',
     '/usr/local/lib/python2.7/dist-packages/pudb-2013.3.4-py2.7.egg',
     '/usr/local/lib/python2.7/dist-packages/Pygments-1.6-py2.7.egg',
     '/usr/local/lib/python2.7/dist-packages/urwid-1.1.1-py2.7-linux-x86_64.egg',
     '/usr/local/lib/python2.7/dist-packages/pythoscope-0.4.3-py2.7.egg',
     '/usr/local/lib/python2.7/site-packages',
     '/usr/local/lib/python2.7/dist-packages',
     '/usr/lib/python2.7/dist-packages',
     '/home/brian/dev',
     '/usr/lib/python2.7',
     '/usr/lib/python2.7/plat-x86_64-linux-gnu',
     '/usr/lib/python2.7/lib-tk',
     '/usr/lib/python2.7/lib-old',
     '/usr/lib/python2.7/lib-dynload',
     '/usr/lib/python2.7/dist-packages/PILcompat',
     '/usr/lib/python2.7/dist-packages/gst-0.10',
     '/usr/lib/python2.7/dist-packages/gtk-2.0',
     '/usr/lib/pymodules/python2.7',
     '/usr/lib/python2.7/dist-packages/ubuntu-sso-client',
     '/usr/lib/python2.7/dist-packages/ubuntuone-client',
     '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol',
     '/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode']
    >>>

    brian@zeus:~/.virtualenvs
    ? v py3venv
    (py3venv)
    brian@zeus:~/.virtualenvs …

python virtualenv zshrc pythonpath virtualenvwrapper

6
推荐指数
1
解决办法
5745
查看次数

PYTHONPATH不包含在Ubuntu 16.04上的sys.path中

经过几个小时的挣扎,我才结束了.

我想将我的项目中的Python模块包含到PYTHONPATH中,以便Python解释器可以解析它们并使它们可用import.

我的项目文件夹如下所示:

my_project/
  module1/
    __init__.py
    module1.py
  module2/
    __init__.py
    module2.py
Run Code Online (Sandbox Code Playgroud)

我已经/etc/bash.bashrc像这样导出了PYTHONPATH :

PYTHONPATH="${PYTHONPATH}:/home/john/my_project/"
Run Code Online (Sandbox Code Playgroud)

重新启动我的shell后,我可以回复它:

$ echo $PYTHONPATH
:/home/john/my_project/
Run Code Online (Sandbox Code Playgroud)

然后我启动一个Python命令行,看看sys.path变成了什么:

$ source /home/john/my_env/bin/activate
(my_env)$ python3
>>> import os
>>> sys.path
['', '/home/john/my_env/lib/python35.zip', '/home/john/my_env/lib/python3.5', '/home/john/my_env/lib/python3.5/plat-x86_64-linux-gnu', '/home/john/my_env/lib/python3.5/lib-dynload', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/home/john/my_env/lib/python3.5/site-packages']
Run Code Online (Sandbox Code Playgroud)

正如你可以清楚地看到的那样,/home/john/my_project/没有包括在内并且import module1会失败.

我能想到的最后一件事是Python无法看到我的PYTHONPATH变量,因此没有添加它的内容sys.path.

你们发现我的错误吗?

提前致谢.

python linux bash

6
推荐指数
1
解决办法
3917
查看次数

在虚拟环境中安装我自己的 python 模块

我拥有的:

  • 我想变成模块的本地 Python3 文件 test_module

  • test_module包含一个空的__init__.py、一个setup.py文件(见下文)和包含多个源文件的子目录的文件夹

我想要的是:

  1. test_module当地不断努力和改进

  2. 有一种简单的方法可以test_module在我自己的虚拟环境中本地安装及其所有依赖项(使用创建python3 -m venv my_environment

  3. 运行通过 使用模块的文件python myexample.py,而不必在每次进入或退出时调整我的本地 PYTHONPATH 变量my_environment

  4. 通过 git 与其他人共享我的 python 代码,并允许他们使用相同的过程在他们的机器上本地安装他们的代码(尽可能简单)

  5. 学习如何创建自己的模块的最佳实践

我现在是怎么做的:

我想知道是否有基于 的“更清洁”的解决方案setup.py,可能涉及pip install ./test_module处理 2.-3 的类似或类似内容。自动地。

我当前的setup.py文件如下所示

 from …
Run Code Online (Sandbox Code Playgroud)

python module virtualenv

6
推荐指数
1
解决办法
3430
查看次数

我的虚拟环境(python)导致我的PYTHONPATH崩溃了吗?

在我的/ etc/profile中,我将PYTHONPATH设置为某种东西.

但是当我 source myvirtual-env

然后在python中执行此操作:

>>> import sys
>>> print sys.path
Run Code Online (Sandbox Code Playgroud)

我在任何地方都看不到我的路.

python unix linux virtualenv

5
推荐指数
1
解决办法
1776
查看次数

使用 tox 的虚拟环境 PYTHONPATH

我有一个 tox.ini 文件

[testenv:py27]
deps= -r{toxinidir}/requirements.txt
setenv =
    PYTHONPATH = {toxinidir}{:}{toxinidir}/helpers
Run Code Online (Sandbox Code Playgroud)

我运行了命令tox,并在里面创建了 virtualenv.tox/py27

当我激活 py27 环境时

cd .tox/py7/bin
source activate 
py27 $ echo $PYTHONPATH < gives null>
Run Code Online (Sandbox Code Playgroud)

PYTHONPATH虽然 tox.ini 已setenv明确PYTHONPATH设置但为空

为什么 PYTHONPATH 将自身设置为空?

python tox

5
推荐指数
1
解决办法
4689
查看次数