Python 3.3在其标准库中包含了新包venv.它做了什么,它与所有其他似乎与正则表达式相匹配的包有什么不同(py)?(v|virtual|pip)?env?
所以我在Ubuntu 14.04机器上将我的所有工具从python2迁移到python3.4.到目前为止,我已经完成了以下工作:
mkvirtualenv --python=/usr/bin/python3('workon'在下面被调用为'v')现在好奇,你可以清楚地看到它,从virtualenv激活的环境运行python3仍然继承我的$ PYTHONPATH,它仍然为我所有的python2路径设置.这在我的virtualenv中安装/运行程序时会造成严重破坏,因为python3路径显示在旧的python2路径之后,因此python2模块首先在我的程序中导入.在启动virtualenv之前将我的$ PYTHONPATH取消为''修复此问题并且我的程序按预期启动.但我的问题是:
? 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模块包含到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.
你们发现我的错误吗?
提前致谢.
我拥有的:
我想变成模块的本地 Python3 文件 test_module
test_module包含一个空的__init__.py、一个setup.py文件(见下文)和包含多个源文件的子目录的文件夹
我想要的是:
在test_module当地不断努力和改进
有一种简单的方法可以test_module在我自己的虚拟环境中本地安装及其所有依赖项(使用创建python3 -m venv my_environment)
运行通过 使用模块的文件python myexample.py,而不必在每次进入或退出时调整我的本地 PYTHONPATH 变量my_environment
通过 git 与其他人共享我的 python 代码,并允许他们使用相同的过程在他们的机器上本地安装他们的代码(尽可能简单)
学习如何创建自己的模块的最佳实践
我现在是怎么做的:
pip freeze > requirements.txt并pip install -r requirements.txt用于安装依赖项
添加export PYTHONPATH="${PYTHONPATH}:."到my_environment/bin/activate, 在搜索路径中拥有我自己的模块(如下所示:How do you set your pythonpath in an already-created virtualenv?)
我想知道是否有基于 的“更清洁”的解决方案setup.py,可能涉及pip install ./test_module处理 2.-3 的类似或类似内容。自动地。
我当前的setup.py文件如下所示
from …Run Code Online (Sandbox Code Playgroud) 在我的/ etc/profile中,我将PYTHONPATH设置为某种东西.
但是当我 source myvirtual-env
然后在python中执行此操作:
>>> import sys
>>> print sys.path
Run Code Online (Sandbox Code Playgroud)
我在任何地方都看不到我的路.
我有一个 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 ×7
virtualenv ×4
linux ×2
bash ×1
installation ×1
module ×1
pyenv ×1
python-venv ×1
pythonpath ×1
tox ×1
unix ×1
zshrc ×1