【问题标题】:import python modules directly from raw git tree直接从原始 git 树导入 python 模块
【发布时间】:2014-10-14 13:43:40
【问题描述】:

我在 git 树中直接有以下目录,我想通过将其基目录添加到 PYTHONPATH 来引用它,而无需打包和安装模块。

一旦添加到 PYTHONPATH,如果内部 cstruct 目录被拉出一层,那么由于它有一个 init.py 文件,只需执行一个

import cstruct

但是,由于我还保留了设置文件,它需要嵌套在另一个级别,这使得像上面这样的导入不起作用。

有没有办法解决这个问题?我正在考虑在基本目录中构建一些 init.py 可以“拉”出内部 cstruct 或以某种方式将最外面的 cstruct 添加到 python 路径,但我不知道如何去做.

为了清楚起见,我在这里使用 cstruct 作为我从 github 提取的示例,但是我有六个这样的库,我真的很想在我的开发环境中引用 ad-hoc 而不需要打包 +安装。

.
├── cstruct
│   ├── cstruct
│   │   ├── examples
│   │   │   ├── fdisk.py
│   │   │   └── __init__.py
│   │   ├── __init__.py
│   │   └── tests
│   │       ├── __init__.py
│   │       └── test_cstruct.py
│   ├── LICENSE
│   ├── MANIFEST.in
│   ├── mbr
│   ├── README.md
│   ├── setup.cfg
│   └── setup.py

【问题讨论】:

  • 为什么要这样做而不是安装在 virtualenv 中?

标签: python pythonpath


【解决方案1】:

我不知道您为什么不将其安装在 virtualenv 中,但鉴于您的具体问题,为什么您不能简单地按照您最初的建议进行操作并将外部目录添加到 PYTHONPATH?

您可以在 shell 中执行此操作:

export PYTHONPATH=$PYTHONPATH:/path/to/outer/cstruct

或从 Python 内部:

import sys
sys.path.insert(0, '/path/to/outer/cstruct')

【讨论】:

  • 我认为这个想法几乎是处理基本目录。就像站点包一样,可以将其添加到他们的 python 路径中,并且树下的所有模块都可用。 sys.path.insert 不能在 basedir 的 init.py 中完成吗?
  • 是的,但是您需要导入该基本目录,以便执行该__init__.py。不知道这有什么帮助。
  • 这就是我最初概述的内容 - 只需单独添加 basedir,但当我尝试时它似乎不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 2020-10-09
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多