Пакет import org.apache.commons.lang.SerializationUtils;
Существует метод SerializationUtils.clone(Object);
Пример
this.myObjectCloned = SerializationUtils.clone(this.object);
from __future__ import absolute_import
является значением по умолчанию для Python 3. Поэтому оператор from calendar import isleap
импортирует модуль верхнего уровня calendar
.
Если вы видите другие результаты; это означает, что вы не используете Python 3 или пытаетесь запустить модуль python изнутри пакета в качестве скрипта (в самом каталоге myproject
находится sys.path
). Если последний, то ваш calendar.py
становится модулем верхнего уровня и (из-за того, что текущий каталог появляется перед каталогами stdlib в sys.path
), from calendar import isleap
импортирует calendar.py
из текущего каталога. «Никогда не добавляйте каталог пакета или любой каталог внутри пакета непосредственно к пути Python»
Чтобы этого избежать, не запускайте модули из пакетов python прямо, например, do не делаем это: cd myproject; python foo.py
. Сделайте это вместо: python -mmyproject.foo
(или вы можете определить, какие сценарии должны быть запущены в setup.py
или , создать аналогичный скрипт вручную: from myproject import foo; foo.main()
).
Если вы хотите запустить пакет Python в качестве сценария, тогда создайте myproject/__main__.py
, затем запустите python -mmyproject
.
Если вы хотите сделать относительный импорт в Python 3; сделайте это явно, например, в myproject/foo.py
:
from .calendar import something
Или выполните абсолютный импорт:
from myproject.calendar import something
Похоже, что ваш путь или структура каталогов настроены неправильно.
Учитывая следующую структуру, полное имя вашего модуля календаря должно быть myproject.calendar
. Вы можете проверить это, распечатав атрибут __name__
вашего модуля. Для этого путь, который ваша программа использует для импорта локальных модулей, должен быть папкой, содержащей myproject
.
myproject
├── calendar.py
├── foo.py
└── __init__.py
Кажется, что путь, который вы используете, фактически myproject
. Значение calendar.py
превращается в модуль корневого уровня calendar
, а не myproject.calendar
. Python предпочитает локальные модули для встроенных, поэтому импортирует ваш модуль calendar
.
Более типично вы можете сделать что-то вроде этого.
MyProjectFolder
├── main.py
└── myproject
├── calendar.py
├── foo.py
└── __init__.py
И затем запустите свою программу следующим образом:
#! /bin/bash
cd /path/to/MyProjectFolder
python main.py
Python проверит ваши локальные модули и загрузит их сначала с помощью import
.
from calendar import isleap
будет сначала искать модуль calendar
в вашем пакете локали. Если не найден, он будет импортироваться из встроенной библиотеки calendar
.
from .calendar import isleap
будет импортироваться только из вашего языкового модуля calendar
. Если не найден, возникает исключение ImportError
.
Вот почему вы должны использовать относительный импорт в пакете.
Вы можете сделать такой трюк, чтобы импортировать встроенную библиотеку без проверки локальных модулей. Но это всего лишь трюк. Я никогда не буду использовать его в производстве. Лучше переименуйте свой модуль calendar
.
import imp, sys
f, pathname, desc = imp.find_module("calendar", sys.path[1:])
calendar = imp.load_module("calendar", f, pathname, desc)
f.close()
from calendar import isleap