0

我开发了一个工具,我想在另一个应用程序中使用它。现在,我只是将我的工具复制到新应用程序中。文件架构如下图所示。

.
├── inner
│   ├── a
│   │   ├── a.py
│   │   └── __init__.py
│   ├── b
│   │   ├── b.py
│   │   └── __init__.py
│   ├── __init__.py
│   └── inner.py
└── outer.py

一个.py

class A(object):

    def output(self):
        print('A')

b.py

from a.a import A


class B(object):

    def output(self, a):
        print('B')
        print(isinstance(a, A))

内部.py

from a.a import A
from b.b import B

a = A()
b = B()
a.output()
b.output(a)

B.output 将检查第二个参数 a 是否是类 A 的实例。inner.py在文件夹下运行inner会给出输出

A
B
True

但是,当我在我的新应用程序文件夹下运行几乎相同的代码时outer.py,输​​出不是预期的。

A
B
False

外部.py

import sys

sys.path.append('inner')


if __name__ == '__main__':
    from inner.a.a import A
    from inner.b.b import B
    a = A()
    b = B()
    a.output()
    b.output(a)

当我添加print(a)outer.py 时,我得到<inner.a.a.A object at 0x7f45e179f2d0>,而不是a.a.A object.

我想知道,如何集成内部应用程序以isinstance返回正确的结果?我应该将所有文件夹添加inner到中sys.path吗?如果是这样,我会选择去掉类型检测。

4

1 回答 1

0

这确实会不时被问到,但我找不到合适的副本。

不要在 packages中运行脚本 ,而是将其制作成一个可安装的 Python 包,您将安装它,并使用它来将给定的模块作为.python -m inner.inner__main__

于 2017-09-16T07:51:04.303 回答