【问题标题】:python multiple project practicepython多项目实践
【发布时间】:2017-06-09 01:10:51
【问题描述】:

所以我有多个类似的项目

DevelFolder/
   ├──MyuniversalModule/
      ├── .git
      ├── __init__.py
      └── mymodule.py
   ├──project01/
      └── myproject01.py
   └──project02/
      └── myproject02.py

现在,在我的 2 个项目中,我想导入我一直在单独开发的“MyuniversalModule”,它仍在进行中,我将根据我的项目需要对其进行更改。完成这些项目后,我将添加此模块,但此时我想单独开发和测试它,因为它可能会在多个地方使用。

我正在寻找解决方案,例如从父目录导入

from ... import module

import imp
foo = imp.load_source('module.name', '/path/to/file.py')
foo.MyClass()

import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..'))

但是在这种情况下工作的最佳做​​法是什么?

【问题讨论】:

    标签: python python-import python-module


    【解决方案1】:

    相对导入通常仅用于您的项目独有的子模块。如果你有一个模块会被多个项目共享,一个常见的做法是将它单独打包成一个 pip 包,然后在每个新项目中使用

    pip install local/path/to/my/other/package 
    

    按要求安装它。您也可以使用pip install git+ssh 从私有 git 服务器安装。

    【讨论】:

    • 但是当我仍在开发“MyuniversalModule”时,您建议我每次更改该模块中的某些内容时都必须打包和安装,以便在我的项目中对其进行测试。我想让它们保持交互,直到它可以使用。否则我也可以从 github 上拉它,对吧?
    • 是的,您每次更改某些内容时都会运行pip install --upgrade(您实际上不必执行任何打包,pip 包只是 pip 所需的特定目录树结构/配置文件)
    【解决方案2】:

    考虑将其他模块的路径作为环境变量。

    def add_to_syspath(name):
        module_path = os.environ[name] if name in os.environ else None
    
        if module_path is None:
            raise RuntimeError(f'{name} not found in the environment variables.')
        elif not os.path.exists(module_path):
            raise RuntimeError(f'{name} module not found: {module_path}')
    
        sys.path.insert(0, os.path.abspath(module_path))
    

    然后,您可以在系统范围或项目特定的环境变量中指定特定项目在系统上的位置。

    赢:setx MY_UNIVERSAL_MODULE_PATH "C:\lib\my_universal_module"

    Linux:export MY_UNIVERSAL_MODULE_PATH ="~/lib/my_universal_module"

    或者通过适当的 GUI 来实现。

    这种包含模块的方式很简单:

    # inside of myproject01.py
    add_to_syspath('MY_UNIVERSAL_MODULE_PATH')
    from mymodule import foo # check that your import worked
    

    【讨论】:

      猜你喜欢
      • 2017-08-24
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多