从远程目录导入Python模块

时间:2009-10-15 15:04:09

标签: python

从远程相对目录导入模块的最短方法是什么?

我们一直在使用这个代码,这个代码不是太糟糕,除了你当前的工作目录 与这个代码或相对路径中断的目录相同,这可能容易出错并使用户感到困惑。

import sys
sys.path.append('../../../Path/To/Shared/Code')

这段代码(我认为)解决了这个问题,但输入的内容要多得多。

import os,sys
sys.path.append(os.path.realpath(os.path.join(os.path.dirname(__file__), '../../../Path/To/Shared/Code')))

是否有更短的方法来追加绝对路径?简洁至关重要,因为必须输入/出现在我们的许多文件中。 (我们不能把它排除在外,因为它会出现在共享代码中,我们无法理解它。鸡肉和鸡蛋,引导等等。)

另外,令我烦恼的是我们盲目地追加到sys.path,但这将是更多的代码。我确定希望标准库中的某些内容可以帮助解决这个问题。

这通常出现在从命令行运行的脚本文件中。我们正在运行Python 2.6.2。

修改 我们使用相对路径的原因是我们通常在计算机上有多个独立的代码库副本。重要的是,代码库的每个副本都使用自己的共享代码副本。因此,任何仅支持单个代码库的解决方案(例如,“将其置于站点包中。”)对我们无效。

有什么建议吗?谢谢!

4 个答案:

答案 0 :(得分:4)

由于您不想在site-packages中安装它,因此应使用buildoutvirtualenv来创建隔离的开发环境。这解决了问题,并且意味着您不必再使用sys.path(事实上,因为Buildout正是为您做的)。

答案 1 :(得分:2)

您已在评论中解释了为什么您不想安装“单个site-packages目录”,但是如何将site-packages放入一个小的模块,说jebootstrap.py

import os, sys

def relative_dir(apath):
  return os.path.realpath(
      os.path.join(os.path.dirname(apath),
      '../../../Path/To/Shared/Code'))

def addpack(apath):
  relative = relative_dir(apath)
  if relative not in sys.path:
    sys.path.append(relative)

现在代码中的任何地方都可以拥有

import jebootstrap
jebootsrap.addpack(__file__)

并且所有其他共享代码库可以按安装保持独立。

答案 2 :(得分:1)

您是否不想在site-packages下创建自己的共享代码目录?然后你可以导入import shared.code.module ...

答案 3 :(得分:-1)

您可以通过多种方式处理导入,所有这些都在Python语言手册中有记录。

请参阅http://docs.python.org/library/site.htmlhttp://docs.python.org/reference/simple_stmts.html#the-import-statement

  1. 将它放在site-packages中并安装多个Python。您可以使用普通的PATH环境变量选择安装。

  2. 将目录放在PYTHONPATH环境变量中。这是一个针对每个人的设置,因此您可以通过这种方式管理多个版本的代码库。

  3. 将目录放在网站包中的.pth个文件中。您可以使用普通的PATH环境变量选择安装。