【问题标题】:Python - Import package modules before as well as after setup.py installPython - 在 setup.py 安装之前和之后导入包模块
【发布时间】:2019-05-08 00:03:18
【问题描述】:

假设一个 Python 包(例如,MyPackage)由多个模块(例如,MyModule1.pyMyModule2.py)和一组单元测试(例如,MyPackage_test.py)组成。

.
├── MyPackage
│   ├── __init__.py
│   ├── MyModule1.py
│   └── MyModule2.py
├── README.md
├── requirements.txt
├── setup.py
└── tests
    └── MyPackage_test.py

我想在MyPackage_test.py 的单元测试中导入MyModule1.py 的函数。具体来说,我想通过setup.py install MyPackage在安装包之前和之后导入函数。

目前,我使用两个单独的命令,具体取决于安装包之前或之后的状态:

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

# AFTER
import MyPackage

这可以用一个命令完成吗?

【问题讨论】:

  • 可能不是您想要的,但请查看python setup.py develop
  • 我认为这是不可能的,除非脚本的入口点是包含 setup.py 文件的目录。另请参阅this 帖子了解更多信息。
  • 对我来说,这些看起来像是两个不同的导入。扩展sys.path 时,您根本不能导入MyPackage,只能导入MyModule1 等。您原来的问题是什么?您无法在测试中导入您的包吗?
  • 有趣的问题。我很好奇你为什么要这样做。为什么要在已安装软件包之后运行单元测试?

标签: python python-2.7 package python-import pypi


【解决方案1】:

选项 1

似乎以下命令可以满足我的需要:

sys.path.append(os.path.join(__file__.split(__info__)[0] + __info__), __info__)

选项 2

根据__init__.py 的位置,这也有效:

sys.path.append(os.path.dirname(os.path.split(inspect.getfile(MyPackage))[0]))

选项 3

此外,ResourceManager API 似乎提供了其他方法。

【讨论】:

    【解决方案2】:

    在 pycharm IDE 中,您可以轻松导入方法。通过将工作目录设置为包含所有文件的文件夹。
    然后,在 MyPackage __init__.py 文件中导入来自 MyModule1.pyMyModule2.py 的所有函数.
    然后在 MyPackage_test.py 你可以使用

    import MyPackage 
    from MyPackage import xyz
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 2021-08-03
      • 2021-08-16
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      • 2016-05-12
      相关资源
      最近更新 更多