Найти - Пользователи
Полная версия: import файлов находящихся в соседней папке
Начало » Python для новичков » import файлов находящихся в соседней папке
1 2 3
Kogrom
Ну и, конечно же, тут много интересного и на русском:
http://asvetlov.blogspot.com/2010/05/blog-post.html

3 части. Начиная с основ. Хотя, если честно, немного расстраивает, что там много теории и мало примеров. Я обычно начинаю понимать с практического примера. После этого и теория нормально воспринимается.

То есть статьи больше рассчитаны на то, чтобы упорядочить знания тех, кто и так знает.
Андрей Светлов
Kogrom, вы правы. Эти статьи, в первую очередь - упорядоченное перечисление всех моих знаний о том, как работает импорт в Питоне.
Это довольно объем большой информации, и я посчитал нужным сначала изложить все _без примеров_ - просто потому, что без знания основ невозможно углублятся в детали.

Сейчас заканчиваю вычитку двух последних теоретических статей серии. Надеюсь, это действительно все. Зимой, начиная делать наброски, я не предполагал, что нужно рассказать так много перед тем, как начать приводить код.

В планах лежит еще пример очень нетривиального расширения импорта - что-то вроде демонстрации всего изложенного в действии. Там на данный момент почти только один код - все уже, вроде бы, разжевал.

Если у вас есть какие-нибудь пожелания по примерам - буду рад выслушать. Например, в этом топике проблема может быть решена через установку __package__ в модуле __main__ - и, наверное, я развернуто опишу решение. Можно и через sitecustomize.py (за попытку - наказывать с особым цинизмом).
Все еще рекомендую, как и писал ранее, использовать правильные setup.py

В общем, если сформируете ваш запрос - попробую написать об этом. Только, прошу - создайте новую тему для обсуждения.
Kogrom
Андрей Светлов
Если у вас есть какие-нибудь пожелания по примерам - буду рад выслушать.
Пока нету, ибо нет потребности.
Тему создавать тоже не буду пока, так как не чётко представляю о чём она будет. Но какие-то зацепки есть.

Андрей Светлов
Например, в этом топике проблема может быть решена через установку __package__ в модуле __main__ - и, наверное, я развернуто опишу решение.
В этом топике проблему лучше решать через передачу объектов, а не манипуляцию с пакетами и модулями. То есть, например, на верхнем уровне создаём объект, передаем вглубь, там он обрабатывается и возвращается. Я так вижу.

Другое дело, если у нас есть пакет (или даже модуль), который используется в нескольких проектах. Тут действительно нужна какая-то установка. Но можно получить что-то типа длл-хелла. Хотя, вероятно, какие-то предохранители предусмотрены.
zloyGamer
питон это особенный язык, хотябы потому, что просто нереально сделать простейшие вещи по человечески, и так тяжело добиться адекватного ответа от людей немного знающих питон,
я пока сделал так:
import sys

from myFunc1.testmod1 import *

sys.path.insert(0, "..")
from myFunc2.testmod2 import * #а это для соседней папки с главным модулем
sys.path.pop(0) #убираем за собой
на мой взгляд это просто дикое решение которое немного попахиват,
если не убирать за собой(sys.path.pop(0) ) то к концу всех импортов в sys.path будет такая куча г,
с другой стороны этот же sys.path может ещё также модифицироваться во включаемых модулях,
это хорошо если там будут включения подобные этому, а если нет? если sys.path будет меняться в каких то других целях и по делу?
- в таком случае этот говнокод непокатит, и в большой его куче придется долго искать ошибку

вообщем пока вы тут умничаете и дописываете ваши статьи - говнокод плодится просто в нереальном количестве!
спешите, спешите.. )
truporez
почему-бы не применить .pth файл на корень проекта?
Zubchick
почему бы не проектировать пакеты правильно?
truporez
Zubchick
почему бы не проектировать пакеты правильно?
это было-бы слишком замечательно.
zloyGamer
почему бы не проектировать пакеты правильно?
все предельно правильно! во всяком случае в моем проекте по моему мнению!

а вот подскажите ещё, нет ли в питоне такой штуки типа как предпроцессор в СИ или чтото подобное чтоб можно было вот это :
sys.path.insert(0, "..")
from myFunc2.testmod2 import *
sys.path.pop(0)
записать в одну строчку?
truporez
sys.path.insert(0, "..");from myFunc2.testmod2 import *;sys.path.pop(0)
про препроцессор: http://pypi.python.org/pypi/pypreprocessor/0.3.0

но, меня терзают смутные сомнения, что все-таки вас несет не туда, если требуются такие хаки.
zloyGamer
truporez
про препроцессор: http://pypi.python.org/pypi/pypreprocessor/0.3.0
спасибо огромное! это то что доктор прописал!

truporez
но, меня терзают смутные сомнения, что все-таки вас несет не туда, если требуются такие хаки.
да, меня тоже терзают после того как в дело пошел sys.path

молодец автор pypreprocessor'а, хотя он могбы как define тудаже прикрутить ещё и инклуд, былобы вообще здорово! цены бы ему не было!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB