代码之家  ›  专栏  ›  技术社区  ›  KubiK888

如何从本地目录而不是pip安装库导入模块?

  •  0
  • KubiK888  · 技术社区  · 6 年前

    我克隆了一个python库 xyz

    >> project (folder)
        * main.py
        >> xyz_git (folder)
              >> xyz (folder)
    

    main.py

    import sys
    sys.path.insert(0, './xyz_git')
    from xyz import Xyz
    
    instance = Xyz()
    print(instance.some_function())
    

    问题是我还安装了pip模块 xyz公司 默认为python。即使我删除了本地文件夹 from xyz import Xyz 由于默认的pip安装,仍将工作。我如何确保 不是从本地目录导入的,会不会出错?

    2 回复  |  直到 6 年前
        1
  •  1
  •   skullgoblet1089    6 年前

    如果知道本地目录的路径,请在尝试导入之前将其插入数组sys.path的第一个位置。

    例如

    import sys
    mypath = "ABS_PATH_TO_PROJECT_ROOT_DIR"
    sys.path.insert(0, mypath)
    from module import var
    

    如果您使用的是git,您可能需要考虑将其添加为git submodule 也。

        2
  •  0
  •   zacm    6 年前

    主.py

    import sys
    sys.path.insert(0, './xyz_git')
    import xyz
    try:
        xyz.foo
    except AttributeError as e:
        raise AttributeError('Local module xyz not installed!')
    
        3
  •  0
  •   Xander    4 年前

    this question

    $ cd ~/xyz_git/
    $ pip install -e .
    

    将在pip中重新加载包,以便pip引用本地包。要强制检查pip中的路径,请执行以下操作:

    import xyz
    correctLocation = "ABS_PATH_TO_PROJECT_ROOT_DIR/xyz_git/"
    assert correctLocation == os.path.abspath(xyz.__file__))
    

    当然“正确的位置”需要匹配绝对导入路径,但是如果您在dev模式下安装了correctl,那应该没有问题。

    如上所述,我还强烈建议使用虚拟环境来管理已安装的软件包。

    $ virtualenv dev_env
    $ source dev_env/bin/activate
    

    在开发模式下安装之前。