设置Python路径

4

我有一个Django应用程序,每当我尝试运行我的代码时都会出现错误:

Error: No module named django_openid

让我稍微回顾一下,告诉你我是如何发现这个问题的:

  1. 我重新格式化了我的电脑,完全重新安装了所有东西——包括 virtualenv 以及我基于 requirements.txt 文件中的设置所需的所有依赖包(除了 Django)
  2. 我尝试运行 python manage.py syncdb,但出现了错误

我在谷歌上搜索了这个问题,很多人说这可能是路径问题。

我对如何改变路径变量感到困惑,以及它们到底是什么意思。我找到了一些文档,但由于我是一个有点生疏的新手,它有点难以理解。

因此我的问题是:

  1. 它们到底是用来做什么的——它们是基于 Python 版本的系统级别的还是项目相关的?
  2. 我该如何查看当前设置的值?
  3. 我该如何更改它们(即 .profile 文件在哪里,我可以使用文本编辑器吗)

如果您有任何建议,那就太好了,因为这个问题让我很困惑,我只想回去写代码 :-)

2个回答

6
`path` 是指 Python 在你的文件系统中搜索你要导入的模块的位置。例如,当你运行 `import somemodule` 时,Python 将在 `sys.path` 变量包含的所有位置中搜索 `somemodule`。
你应该检查 `sys` 模块中的 `path` 属性。
import sys
print sys.path

这只是一个普通的列表,因此您可以向其中添加/删除元素:

sys.path.append('/path/to/some/module/folder/')

如果您想为每个Python会话更改路径,您应该创建一个文件在启动时加载,方法如下:
  1. 创建一个名为PYTHONSTARTUP的环境变量,并将其设置为您的启动文件。例如:PYTHONSTARTUP=/home/user/.pythonrc(在Unix shell中);
  2. 编辑启动文件,使其包含您希望在Python加载时自动执行的命令;
一个.pythonrc的示例可能是:
import sys
sys.path.append('/path/to/some/folder/')

感谢。这非常有帮助。不过,我在哪里可以永久附加它?如果我在shell中执行上面的追加步骤,当我关闭shell时会重置更改。是否唯一的方法是使用您描述的pythonrc? - user1328021
你尝试设置过PYTHONSTARTUP环境变量吗?请注意,当你关闭你的shell时,这个变量将会丢失(为了避免这种情况,你应该在你的shell启动文件中加入PYTHONSTARTUP=/home/user/.pythonrc,例如~/.bashrc)。 - Valdir Stumm Junior
正如@ChrisPratt所指出的那样,您应该检查为什么无法导入您的模块。否则,只是将模块文件夹附加到您的路径可能不是一个很好的解决方案。 - Valdir Stumm Junior

2

您真的需要修改路径吗?最好先仔细考虑一下原因。如果您只在服务器上运行单个应用程序或者您不介意将可能不必要的软件包污染系统包目录,那么请将所有内容放入主系统site-packages或dist-packages目录中。否则,请使用virtualenv。

系统级软件包目录始终位于路径上。激活时,Virtualenv会将其site-packages目录添加到路径中,并且Django在激活时会将项目目录添加到路径中。不应该需要添加其他任何内容到路径中,在实践中,这确实是您永远不需要担心的事情。


谢谢。我正在使用virtualenv,这也是我想的。但是,即使我在虚拟环境中运行,并安装了Django,django文件夹也不在路径上,因此它无法工作。 - user1328021
好的,谢谢Chris。我会研究一下并告诉你。我之前尝试在干净的机器上安装virtualenv之前移植了我的原始virtualenv,并尝试激活它(并安装了一些东西),这实际上是有效的,但当我开始一个新的django项目时,它抱怨我没有运行活动的virtualenv(即使看起来有一个活动的virtualenv)...所以这可能是问题所在。 - user1328021
这可能是你的问题。Virtualenvs 是特定于其环境的。如果您将其移动到不同的操作系统或平台(32 位与 64 位),即使它们存在于包目录中,也很可能无法识别这些软件包。甚至 Python 的不同版本或架构也可能会引起问题。如果您需要将 virtualenv 移动到另一台服务器,请使用 pip 生成一个 requirements 文件,然后在目标上实际创建一个新的 virtualenv,并使用 requirements 文件在那里安装所有软件包。 - Chris Pratt
好的,我刚刚发现了一个奇怪的问题。当我创建一个虚拟环境,然后尝试创建一个新的Pinax项目时,它会告诉我“找不到已激活的虚拟环境(必需)”,但我的虚拟环境实际上是已经激活的。你以前见过这个问题吗?有些奇怪的事情正在发生...顺便说一下,我刚刚将我的Mac更新到Mountain Lion(10.8.1)...不确定是否与此有关。 - user1328021
谢谢你帮我解决了许多问题,下次你来多伦多时,我请你喝啤酒。 - user1328021
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接