【问题标题】:Setting python path设置python路径
【发布时间】:2012-08-29 04:40:09
【问题描述】:

我有一个 Django 应用,每次尝试运行我的代码时都会出错:

Error: No module named django_openid

让我退后一步,告诉你我是怎么做到的:

  1. 我格式化了我的计算机并完全重新安装了所有东西——包括 virtualenv,以及我的项目所需的所有依赖包(除了 Django),基于我的 requirements.txt 文件夹中的设置
  2. 我尝试做python manage.py syncdb 并得到错误

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

我对如何更改路径变量以及它们的确切含义感到困惑。我找到了一些文档,但作为一个 hack-ish 菜鸟,我有点不知所措。

所以我的问题是:

  1. 它们的目的究竟是什么?它们是基于 Python 版本的系统级别,还是依赖于项目?
  2. 如何查看我的当前设置?
  3. 如何更改它们(即他们所说的 .profile 文件在哪里,我可以只使用文本编辑器)

您的任何输入都会很棒,因为这让我很困惑,我只想重新开始编写代码 :-)

【问题讨论】:

    标签: python django path


    【解决方案1】:

    真的需要改变路径吗?最好先真正考虑你的原因。如果您只打算在服务器上运行单个应用程序,或者您只是不关心可能不必要的包污染系统包目录,那么将所有内容放在主系统站点包或 dist-packages 目录中。否则,请使用 virtualenv。

    系统级包目录总是在路径上。 Virtualenv 激活时会将其 site-packages 目录添加到路径中,Django 将在激活时将项目目录添加到路径中。不需要在路径中添加任何其他内容,而且实际上在实践中您永远不必担心。

    【讨论】:

    • 谢谢我正在使用 virtualenv,这也是我的想法。但即使我正在运行一个 virtualenv,并在其中安装了 Django,django 文件夹不在路径上,所以它不起作用。
    • 然后安装出现问题。错误是抱怨 django_openid,not Django 本身。确保您实际安装了 django_openid(默认情况下它不是 Django 的一部分)。如果你有,它很可能被安装到系统级站点包目录中。确保你的 virtualenv 已经激活,然后使用pip 安装包。
    • 好的,谢谢克里斯,我会调查一下,让你知道。我确实遇到了一些问题,因为我在干净的机器上安装 virtualenv 之前尝试移植我原来的 virtualenv 并尝试激活它(并安装了一些东西),但当我开始一个新的 django 项目时它抱怨我没有有一个活动的 virtualenv 正在运行(即使看起来有一个活动的)......所以这可能是问题所在。
    • 这可能是你的问题。 Virtualenvs 特定于他们的环境。如果您将其移动到不同的操作系统或平台(32 位与 64 位),即使它们存在于包目录中,它们也可能不再被识别。即使 Python 的不同版本或架构也可能导致问题。如果您需要将 virtualenv 移动到另一台服务器,请使用 pip 生成一个需求文件,然后在目标上实际创建一个新的 virtualenv 并使用需求文件将所有软件包重新安装到那里。
    • 好吧,我刚刚发现了一个奇怪的问题。当我创建一个 virtualenv 然后尝试创建一个新的 Pinax 项目时,它对我说“找不到激活的 virtualenv(必需)”。但我的 virtualenv 实际上已激活。你以前见过这个问题吗?发生了一些奇怪的事情......顺便说一句,我刚刚将我的 Mac 更新到 Mountain Lion (10.8.1)......不确定这是否与它有关。
    【解决方案2】:

    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 是唯一的方法吗?
    • 您是否尝试过设置 PYTHONSTARTUP 环境变量?请注意,当您关闭 shell 时,此变量将丢失(为避免这种情况,您应该将 PYTHONSTARTUP=/home/user/.pythonrc 放在 shell 启动文件中,例如 ~/.bashrc)。
    • 正如@ChrisPratt 所指出的,你应该检查为什么你不能导入你的模块。否则,仅将模块文件夹附加到您的路径可能不是一个很好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2022-11-25
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多