Импортируйте оформленный модуль как оригинальное имя, не меняя код, импортируйте его - PullRequest
0 голосов
/ 17 февраля 2019

Я хотел бы украсить модуль pandas.DataFrame.to_csv, но не хочу изменять код, который импортирует панд.main.py

import pandas
pandas.DataFrame.to_csv(DATAFLAME_INSTANCE)

добавить путь к питону, в котором я ставлю следующий __init__.py
export PYTHONPATH="/mylib"

/mylib/pandas/__init__.py

import sys
syspath = sys.path
# remove added lib path so that "import" imports original pandas
syspath_list = list(syspath)
syspath_list.remove("/mylib")
sys.path = tuple(syspath_list)
from pandas import *
from pandas import DataFrame as _DataFrame
# restore sys.path so that main.py read this __init__.py
sys.path = syspath

class DataFrame(_DataFrame):
    def to_csv(self, *args, **kwargs):
        print("decorated")
        super(_DataFrame, self).to_csv(*args, **kwargs)

при выполнении main.py эта ошибка возникает

$ python main.py
(general) PC:sacred-test user$ python main.py 
Traceback (most recent call last):
  File "main.py", line 1, in <module>
    import pandas
  File "/mylib/pandas/__init__.py", line 8, in <module>
    from pandas import DataFrame as _DataFrame
ImportError: cannot import name 'DataFrame'

В этом примере я хочу, чтобы main.py в конечном итоге создавал «украшенный» стандартный вывод, но я обнаружил, что не должен использовать @deco, хотя

...