Setuptools установить пакет в месте, которое является доступным из питона, т.е. вы можете импортировать:
import project
проблема рейз, когда вы делаете относительно импорта вместо абсолютного импорта. если ваш main.py
импорт config.py
работает, потому что они живут в том же каталоге. когда вы переместите свой main.py
в другое место, например /usr/bin
, или в другом месте, расположенном в PATH переменная окружения, python попробуйте импортировать config.py
из sys.path
, а не из вашего пакета. решение использовать абсолютный импорт:
from project import config
Теперь main.py
является «подвижным».
Другое решение, которое я предпочитаю, использует автоматическое создание сценариев, предлагаемое setuptools.
вместо того, чтобы ваш код в
if __name__ == "__main__":
# here all your beautiful code
заявление, поставить свой код в функции (основной может быть хорошее имя):
def main():
# put your code here
if __name__ == "__main__": # not needed, just in case...
main()
теперь модифицируют ваш setup.py
:
setup(
# ...
entry_points = {
"console_scripts": [
# modify script_name with the name you want use from shell
# $ script_name [params]
"script_name = project.main:main",
],
}
)
это все.после установки setuptools создаст скрипт-оболочку, вызываемый оболочкой и вызывающий вашу основную функцию. теперь main.py
может жить в вашем каталоге проектов, и вам больше не нужно переместить его в каталог bin/
. обратите внимание, что setuptools автоматически помещает этот скрипт в каталог bin/
относительно префикса установки.
es.
python setup.py install --prefix ~/.local
установить пакет проекта в
~/.local/lib/python<version>/site-packages/<package_name>
и ваш скрипт в
~/.local/bin/<script_name>
поэтому убедитесь, что ~/.local/bin
присутствует в вашем PATH окр. более
Информация на сайте: http://peak.telecommunity.com/DevCenter/setuptools#automatic-script-creation
Я предполагаю, что я глуп, но я не вижу, как это имеет отношение? Не могли бы вы уточнить? – pafcu
Я думаю, что неправильно понял ваш вопрос. вам нужно импортировать '/ usr/share/config.py'? это не является хорошим способом позволить пользователю настроить поведение вашего приложения. лучшим решением является файл конфигурации пользователя, например '$ HOME/.projectrc', возможно, глобальная конфигурация в'/etc/'. если это ваша проблема, я исправлю свой ответ. –
Да, проблема заключается в импорте config.py. И в вопросе я специально говорю, что он не содержит никакой информации о конфигурации, он содержит только реализацию для загрузки фактических файлов конфигурации. Это часть программы, а не файл конфигурации или плагин. Если честно, я не полностью понимаю вещь entry_points. Это вполне может быть то, что я ищу, но я считаю, что документация немного запутанна. – pafcu