我对编程比较陌生并且已经搜索过了,直到我的指尖都是蓝色的,但似乎无法找到解决我遇到的问题的方法。
我在OSX上安装了自制的Python 2和Python 3版本,我似乎无法在我的.bash_profile中获得正确的PATH / PYTHONPATH,以便能够在IDLE的两个版本中正确导入模块。但是,我可以在shell窗口中直接运行Python 2或Python 3时导入模块。我正在通过终端启动IDLE,因此它应该正确初始化路径。
这是我的.bash_profile
:
export PATH=/bin:/usr/local/bin:$PATH
export PYTHONPATH=/Users/maverett/Documents/PyModules:/Users/maverett/Dropbox/matrix/:$PYTHONPATH
以下是使用numpy作为示例模块在所有四种情况下发生的情况。
在终端中运行python2时导入:
$ python2
Python 2.7.5 (default, Jun 28 2013, 19:06:25)
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>>
从终端启动Python 2的IDLE,我也可以导入numpy。但是,当我在终端中比较IDLE与sys.path
中的sys.path
时,它们是不同的。我比较了列表以产生差异并找到:
>>> InIdleNotInTerm
['/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/bin']
>>> InTermNotInIdle
[]
因此,在运行Python 2时,IDLE路径中有一个额外的目录。
Python 3的故事完全不同。
$ python3
Python 3.3.2 (default, Jul 1 2013, 10:53:26)
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>>
但是,如果我为Python 3启动IDLE(通过在终端中键入idle3)然后尝试导入numpy,我得到
>>> import numpy as np
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
import numpy as np
ImportError: No module named 'numpy'
>>>
再一次,我在终端和IDLE中比较了sys.path
,这次有很大差异:
>>> pp(InIdleNotInTerm)
['/Library/Frameworks/Python.framework/Versions/3.3/bin',
'/Library/Frameworks/Python.framework/Versions/3.3/lib/python33.zip',
'/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3',
'/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/plat-darwin',
'/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/lib-dynload',
'/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages']
>>> pp(InTermNotInIdle)
['/usr/local/Cellar/python3/3.3.2/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/distribute-0.6.45-py3.3.egg',
'/usr/local/Cellar/python3/3.3.2/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/pip-1.3.1-py3.3.egg',
'/usr/local/lib/python3.3/site-packages/distribute-0.6.45-py3.3.egg',
'/usr/local/lib/python3.3/site-packages/pip-1.3.1-py3.3.egg',
'/usr/local/Cellar/python3/3.3.2/Frameworks/Python.framework/Versions/3.3/lib/python33.zip',
'/usr/local/Cellar/python3/3.3.2/Frameworks/Python.framework/Versions/3.3/lib/python3.3',
'/usr/local/Cellar/python3/3.3.2/Frameworks/Python.framework/Versions/3.3/lib/python3.3/plat-darwin',
'/usr/local/Cellar/python3/3.3.2/Frameworks/Python.framework/Versions/3.3/lib/python3.3/lib-dynload',
'/usr/local/Cellar/python3/3.3.2/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages',
'/usr/local/Cellar/python3/3.3.2/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/setuptools-0.6c11-py3.3.egg-info',
'/usr/local/lib/python3.3/site-packages',
'/usr/local/lib/python3.3/site-packages/setuptools-0.6c11-py3.3.egg-info']
知道发生了什么事吗?我尝试过的其他一些事情:
将.bash_profile更改为
export PATH=/bin:/usr/local/bin:$PATH
export PYTHONPATH=/Users/maverett/Documents/PyModules:/Users/maverett/Dropbox/matrix/:/usr/local/lib/python3.3/site-packages/:$PYTHONPATH
导致能够在终端和IDLE中导入Python 3中的模块,但是会破坏Python 2的导入(因为它试图导入Python 3版本!)
从python3.3/site-packages/
通过终端启动Python 3的IDLE导致能够正确导入所有内容,但我不希望每次启动Python 3时都这样做。
您的任何想法或想法将不胜感激!谢谢:))
答案 0 :(得分:0)
好的,这就是我希望你做的事情:
如果您仍在使用它进行包管理,请停止使用easy_install
。请改用pip
。
$> easy_install pip
接下来,获取virtual environments。
$> pip install virtualenv
$> mkdir ~/venvs
$> virtualenv ~/venvs/numpy_project --python=python2.7 --no-site-packages
确保将名称相同的目录传递给virtualenv
。标准用法是按项目组织虚拟环境,因此我将此虚拟环境命名为“numpy_project”。你应该想出一个更好的名字。我还告诉它使用python 2.7,但如果你愿意,你可以选择使用3.3。
基本上,这将为一个特定目的的python专用副本创建一个良好隔热的泡沫。我还告诉它使用no-site-packages
,以确保清洁。它使得设置该项目的工作变得更加容易,可以通过运行:
$> source ~/venvs/numpy_project/bin/activate
这会将你的python环境从全局“main”python切换到这个受保护的副本。然后你可以运行:
$> pip install numpy
它只会为python的副本安装它。
一定要运行
$> pip freeze > requirements.txt
在项目的根目录中,您的README.md
和其他内容会在哪里,以便其他人可以直接运行:
$> pip install -r PROJECT_ROOT/requirements.txt
它会抓住您在虚拟环境中放置的所有内容(即numpy
)。如果他们也在使用虚拟环境,您可以确定他们与您的工作环境完全匹配。不应该与其他软件包和python版本重叠或混淆。
试试这个,看看你是否得到了更好的结果。请记住永远不要使用sudo 运行pip
!
如果这样做,只需卸载numpy的“全局”安装,并在虚拟环境中使用它。