我正在尝试创建一个virtualenv virtualenvwrapper,但是当我使用时,mkvirtualenv我得到以下内容:
ERROR: virtualenvwrapper could not find virtualenv in your path
Run Code Online (Sandbox Code Playgroud)
我以为这是一个PYTHONPATH问题.但如果我这样做,pip show virtualenv我得到以下内容:
---
Metadata-Version: 2.0
Name: virtualenv
Version: 13.1.0
Summary: Virtual Python Environment builder
Home-page: https://virtualenv.pypa.io/
Author: Jannis Leidel, Carl Meyer and Brian Rosner
Author-email: python-virtualenv@groups.google.com
License: MIT
Location: /Volumes/Data/nfs/zfs-student-3/users/2013_paris/vmonteco/Library/Python/2.7/lib/python/site-packages
Requires:
Run Code Online (Sandbox Code Playgroud)
这是我的PYTHONPATH:
/nfs/zfs-student-3/users/2013_paris/vmonteco/Library/Python/2.7/bin:/nfs/zfs-student-3/users/2013_paris/vmonteco/Library/Python/2.7/bin:/nfs/zfs - 学生-3 /用户/ 2013_paris/vmonteco /图书馆/ Python的/ 2.7/lib中/蟒蛇/站点包:/Volumes/Data/nfs/zfs-student-3/users/2013_paris/vmonteco/Library/Python/2.7/ LIB /蟒蛇/站点包:〜/ .brew /酒窖
它包含包含virtualenv的目录!
(即:/Volumes/Data/nfs/zfs-student-3/users/2013_paris/vmonteco/Library/Python/2.7/lib/python/site-packages)
我的〜/ .zshrc包含:
export WORKON_HOME=~/Envs
export PROJECT_HOME=$HOME/Devel
source $HOME"/Library/Python/2.7/bin/virtualenvwrapper.sh"
Run Code Online (Sandbox Code Playgroud)
编辑: …
我写了一个python库应用程序(包含几个*.py文件).我的几个python项目需要重用库应用程序中的代码.重用python代码的推荐最佳做法是什么?目前我已经考虑了三个选项:
export PYTHONPATH=/path/to/library/app.然后,同一台计算机上的每个项目都可以引用库应用程序中的代码.sys.path.append('/path/to/library/app')在上面三个选项中你更喜欢哪一个?与其他两个选项相比,它有什么优势?你还有其他更好的选择吗?非常感谢,如果具有多年python开发经验的人能够回答这个问题.
我在ubuntu 13.04,bash,python2.7.4
解释器没有看到我设置的变量.
这是一个例子:
$ echo $A
5
$ python -c 'import os; print os.getenv( "A" )'
None
$ python -c 'import os; print os.environ[ "A" ]'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
raise KeyError(key)
KeyError: 'A'
Run Code Online (Sandbox Code Playgroud)
但是PATH变量的一切正常:
$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ python -c 'import os; print os.getenv("PATH")'
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Run Code Online (Sandbox Code Playgroud)
它注意到PATH:
$ PATH="/home/alex/tests/:$PATH"
$ echo $PATH
/home/alex/tests/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ python -c 'import os; print os.getenv("PATH")'
/home/alex/tests/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games …Run Code Online (Sandbox Code Playgroud) 在我的系统上,我有多次安装了几个模块.举个例子,numpy 1.6.1安装在标准路径中/usr/lib/python2.7/dist-packages,我有一个numpy 1.8.0安装的更新版本/local/python/lib/python2.7/site-packages/.
我不能简单地删除旧版本的原因是我没有权限在我的工作计算机上更改任何内容.但是我需要使用新的numpy版本.
我加入/local/python/lib/python2.7/site-packages/了我的PYTHONPATH.不幸的是,这没有用,因为/usr/lib/python2.7/dist-packages首先插入到路径中,因此numpy 1.6.1将被加载.这是一个例子:
>>> import os
>>> print os.environ['PYTHONPATH']
/local/python/lib/python2.7/site-packages
>>> import pprint
>>> import sys
>>> pprint.pprint(sys.path)
['',
'/local/python/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg',
'/local/python/lib/python2.7/site-packages/pyparsing-2.0.1-py2.7.egg',
'~/.local/lib/python2.7/site-packages/setuptools-3.4.4-py2.7.egg',
'~/.local/lib/python2.7/site-packages/mpldatacursor-0.5_dev-py2.7.egg',
'/usr/lib/python2.7/dist-packages',
'/local/python/lib/python2.7/site-packages',
'/usr/lib/python2.7',
...,
'~/.local/lib/python2.7/dist-packages',
...]
Run Code Online (Sandbox Code Playgroud)
所以,似乎导入订单是
PYTHONPATH~/.local/lib/python2.7/site-packages/*.egg)~/usr/lib/python2.7/dist-packages/)PYTHONPATH~/.local/lib/python2.7/site-packages/)我的问题是我需要在项目3和项目4之前放置项目5.以使我的代码正常工作.现在,如果我numpy 1.8.0从/local/*目录导入一个编译过的模块,并且这个模块导入numpy,它仍然会从/usr/*目录中取出numpy 并失败.
我通过在我的脚本中放置这样的东西来规避这个问题:
import sys
sys.path.insert(0, '/local/python/lib/python2.7/site-packages/')
Run Code Online (Sandbox Code Playgroud)
因此,我可以强制Python使用正确的导入顺序,但当然这不是一个解决方案,因为我必须在每个脚本中 …
我正在一个项目中编写一系列Python脚本; 每个脚本都在项目的子目录中,如下所示:
projectroot
|
|- subproject1
| |
| |- script1.main.py
| `- script1.merger.py
|
|- subproject2
| |
| |- script2.main.py
| |- script2.matcher.py
| `- script2.merger.py
|
`- subproject3
|
|- script3.main.py
|- script3.converter.py
|- script3.matcher.py
`- script3.merger.py
Run Code Online (Sandbox Code Playgroud)
现在有几个脚本共享一些代码.共享代码最好被认为是项目本身的一部分,而不是我单独编译并创建一个库,或者放入一个全站的PYTHONPATH.我可以将该代码放在各种位置,例如在projectroot目录本身中,或者在projectroot被调用的子目录中common(可能).
但是,到目前为止,我所考虑的大部分方法都是使用空__init__.py文件和使用相对导入(或sys.path在每个子项目中冗余地搞乱)从子项目中创建包.更糟糕的是,似乎围绕这个脚本系列构建包结构被拒绝的PEP-3122发出以下警告:
注意!该PEP已被拒绝.Guido将包中的脚本视为反模式.
如果包中的脚本是反模式的,那么如何以一种将公共代码保存在同一项目中的方式进行设置?或者这里是否可以接受基于模块和包的系统?哪种方法最干净?(FWIW我更喜欢在项目根目录中有一个文件,shared.py或者common.py在项目根目录中,而不是创建一个实用程序目录,它是"真正的"子项目的兄弟.)
问题描述:
使用pip,我升级到了最新版本的请求(版本2.7.0,pip show requests给出了位置/usr/local/lib/python2.7/dist-packages).但是当我在交互式命令行中import requests打印requests.__version__时,我看到的是版本2.2.1.事实证明,Python正在使用预先安装的Ubuntu版本的请求(requests.__file__是/usr/lib/python2.7/dist-packages/requests/__init__.pyc- 不是/user/local/lib/...).
从我的调查来看,这个事实是由于Ubuntu对Python搜索路径的改变(我运行Ubuntu 14.04)引起了Ubuntu Python包的路径(对于我的机器,这种情况发生在usr/local/lib/python2.7/dist-packages/easy-install.pth).在我的情况下,这会导致使用apt-get预先与Ubuntu打包的请求版本,而不是我想要使用的pip版本.
我在找什么:
我希望sys.path在到Ubuntu的Python安装目录的路径之前,全局地将pip的安装目录路径预先添加到Python的搜索路径().由于在我的许多Python脚本中使用了请求(以及许多其他包),我不想手动更改计算机上每个文件的搜索路径.
令人不满意的解决方案1:使用virtualenv
使用virtualenv会对我的机器造成不必要的更改,因为我必须重新安装全局存在的每个包.我只想从Ubuntu的软件包升级到pip的软件包.
不满意的解决方案2:更改easy-install.pth
由于easy-install.pth每次easy-install使用都会被覆盖,easy-install.pth因此如果安装了新软件包,我的更改将被删除.此问题使我很难在我的机器上维护包.
不满意(但我到目前为止最好)解决方案3:添加一个单独的.pth文件
在与easy-install.pth相同的目录中,我添加了一个zzz.pth内容:
import sys; sys.__plen = len(sys.path)
/usr/lib/python2.7/dist-packages/test_dir
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)
Run Code Online (Sandbox Code Playgroud)
site.pyPython启动时会读取此文件.由于它的文件名easy-install.pth是以字母数字形式出现的,因此它会在site.py之后被消耗掉.总之,文件的第一行和最后一行预先添加路径sys.path(这些行取自easy-install.pth).
我不喜欢这个解决方案如何依赖于文件名的字母数字排序来正确放置新路径.
PYTHONPATHs来自Ubuntu的路径
Stack Overflow的另一个答案 …
我正在使用centos linux.
我有django的python 2.6,现在我升级到python 2.7.
Python 2.6位于/usr/lib/python2.6中.
Python 2.7位于/usr/local/lib/python2.7中.
它们都有site-packages目录,它们都包含django 1.2.
如果我运行python我得到2.7版本.
我的问题是如果尝试导入django我得到
ImportError:没有名为django的模块
我不确定我的PYTHONPATH在哪里定义,如果这是我需要改变的.任何人 ?
我最终建立了2.6 site-packages目录的符号链接.
安装了apache-maven-3.3.3,scala 2.11.6,然后运行:
$ git clone git://github.com/apache/spark.git -b branch-1.4
$ cd spark
$ build/mvn -DskipTests clean package
Run Code Online (Sandbox Code Playgroud)
最后:
$ git clone https://github.com/apache/incubator-zeppelin
$ cd incubator-zeppelin/
$ mvn install -DskipTests
Run Code Online (Sandbox Code Playgroud)
然后运行服务器:
$ bin/zeppelin-daemon.sh start
Run Code Online (Sandbox Code Playgroud)
从一开始运行一个简单的笔记本%pyspark,我得到一个关于py4j找不到的错误.刚做过pip install py4j(参考).
现在我收到这个错误:
pyspark is not responding Traceback (most recent call last):
File "/tmp/zeppelin_pyspark.py", line 22, in <module>
from pyspark.conf import SparkConf
ImportError: No module named pyspark.conf
Run Code Online (Sandbox Code Playgroud)
我已经尝试过设置SPARK_HOME:/spark/python:/spark/python/lib.没变.
我有两个版本的python 2.7和3.4并通过pip安装了django.它显示在ubuntu终端:
$ pip freeze
Django==1.6.11
$ pip --version
pip 1.5.4 from /usr/lib/python2.7/dist-packages (python 2.7)
$ python
Python 2.7.9 (default, Feb 3 2016, 02:50:32)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>import django
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named django
>>> import sys
>>> sys.path
['', '/usr/local/lib/python27.zip', '/usr/local/lib/python2.7', '/usr/local/lib/python2.7/plat-linux2', '/usr/local/lib/python2.7/lib-tk', '/usr/local/lib/python2.7/lib-old', '/usr/local/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/site-packages']
>>>
Run Code Online (Sandbox Code Playgroud)
任何的想法??
我想将一些软件包安装到第三方site-packages目录中(超出标准系统位置).有没有办法设置它,以便其中的.pth文件得到尊重?
背景:我正在使用OS X,virtualenv和自制软件.有一些软件包(特别是我的wxPython)不能通过pip很好地安装到virtualenv中.在这些情况下,有自制软件包可以替代它们.Homebrew在中创建了第三个site-packages文件夹/usr/local/lib/python2.7.我想简单地指向这个文件夹,并将所有项目的维护保留在brew控制之下.但是,似乎这是不可能的.
$PYTHONPATH不会加载.pth文件.(OS X上的Python 2.6应该在$ PYTHONPATH中处理多个easy-install.pth文件吗?)add2virtualenv.pth文件添加了一些额外的智能,只是简单地列出了目录,但我相信它只是重新排序路径列表.我当然不是唯一对这个问题感兴趣的人.我打赌大量的通用"pth文件无法正常工作"的问题和在线发帖,我偶然发现与这个问题有关.有一个很好的解决方案吗?
python ×10
pythonpath ×10
django ×2
ubuntu ×2
apache-spark ×1
bash ×1
centos ×1
dry ×1
easy-install ×1
module ×1
pip ×1
pyspark ×1
sys.path ×1
versions ×1
virtualenv ×1