У меня есть проект, который выглядит следующим образом:
.
├── A
│ ├── setup.py
│ ├── __init__.py
│ ├── a.py
│ └── data.py
└── B
├── b.py
└── data.py
У меня нет контроля над A
, но я бы хотел использовать его в B/b.py
. Я не могу переписать любой код в папке A
(кроме setup.py
).
Я попробовал это:
# File A/setup.py
from setuptools import setup, find_packages
setup(name='packageA', version='1.0', packages=find_packages())
При следующей установке / тестах:
$ cd B
$ pip install -e ../A
$ python -c "import a; print(a)"
<module 'a' from 'A/a.py'>
$ python -c "import data; print(data)"
<module 'data' from 'B/data.py'>
# How to get the same for <module 'data' from 'A/data.py'>?
Меня беспокоит столкновение имен, я хотел бы иметь возможность импортировать A/data.py
и B/data.py
в b.py
. Я хотел знать, есть ли способ обойти это?
Я бы хотел написать что-то вроде:
$ python -c "from A import data; print(data)"
<module 'data' from 'A/data.py'>
Я пытался сделать setup.py
на один уровень выше (в каталоге root), но если я это сделаю тогда у меня проблемы в A
:
$ cd B
$ pip install -e ..
$ python -c "from A import data; print(data)"
Traceback (most recent call last):
File "A/data.py", line 1, in <module>
from a import some_function
ImportError: cannot import name 'some_function' from 'a' (unknown location)
Если бы я мог переписать A/data.py
Я мог бы просто сделать это (но я не могу):
from A.a import some_function
Возможно ли это изменить setup.py
для инкапсуляции A
под (поддельным) именем модуля? Любое решение приветствуется.