Pythonda PYTHONPATH modifikatsiyalanib bo'lmaganda boshqa modullarni import qilishning eng yaxshi usuli?

Men pythondagi birinchi loyihamni kodlayapman va importni qanday boshqarishni bilmayman. Men universitetda ishlayapman va PYTHONPATH o'zgaruvchisini o'zgartira olmayman. Men ushbu loyihada turli xil kompyuterlar/OSlardan ishlayapman (shuning uchun loyihaga borish yo'llari har doim ham bir xil emas).

Har xil papkalarda bir nechta modul bor, ular bir-biriga birlashadi. Hozirda file_path = os.path.abspath (__ file __) dan foydalangan holda va keyinchalik kataloglar orqali qayta skanerlash va undan so'ng kerakli modul bilan papkani qo'shib, bir modulni boshqa yo'llardan boshqasiga olaman. Bu keyinchalik sys.path.append (symantic_root) bilan PYTHONPATHga qo'shiladi.

Ushbu tizim ishlaydi, lekin juda ko'p tarqoq ko'rinadi va har bir modulning boshida bir nechta kod mavjud, masalan:

import os
import sys
# Get the path to the directory above the directory this file is in, for any system
file_path = os.path.abspath(__file__)
root_path = os.path.dirname(os.path.dirname(file_path))
# Get the paths to the directories the required modules are in
symantic_root = os.path.join(root_path, "semantic_analysis")
parser_root = os.path.join(root_path, "parser")
# Add the directories to the path variable
sys.path.append(symantic_root)
sys.path.append(parser_root)
import semantic_analyser
import jaml

Bu kabi loyihani tuzishning yaxshiroq yo'llari haqida har qanday maslahat juda qadrlanadi.

1

3 javoblar

Birinchidan, oddiygina main.py yarating. Misol uchun:

if __name__ == '__main__':

    import sys   
    from package import app

    sys.exit(app.run())

So'ngra, barcha modullarni birlashtiradigan va main.py bilan bir xil katalogda uchun kirish nuqtasini taqdim etadigan yuqori darajali paketni yarating. Keyinchalik, barcha yo'lni manipulyatsiya kodini bartaraf etishingiz va dastur ichidagi istalgan moduldan faqatgina , package.module import funktsiyasidan kabi to'liq belgilangan import idoralarini ishlatishingiz kerak.

1
qo'shib qo'ydi
@Alty. Siz o'zingizning savolingizga aniq javob bermadingiz, modullaringiz hozirda mavjud bo'lgan papkalarni qanday qilib qayta tuzishingiz mumkin va men sizning qaysi os ishlatilganligiga ishonchim komil emas - shuning uchun "kirish nuqtasi" faqat oddiy katalog yoki ramziy eng asosiy narsa barcha modullarni bitta to'plam ostida to'plashning yo'lini topishdir. Keyinchalik narsalar boshqarish osonroq bo'ladi (umid qilamanki, bu erda faqatgina aniq ko'rsatma bermayman).
qo'shib qo'ydi muallif ekhumoro, manba
Javobingiz uchun tashakkur. Men "kirish nuqtalarini taqdim etish" deb aytsangiz, aynan nimani nazarda tutayotganingizni bilaman. Bu init .py fayl bilan bog'liqmi?
qo'shib qo'ydi muallif Will Sewell, manba

Birinchidan, Python yo'llari haqidagi ba'zi narsalarni quyidagi hujjatlarda o'qishingiz kerak:

Muammoingizni hal qilish uchun ehtimol pth ( python- qidiruv-yo'l ) sizning kerakli modullar ro'yxatini o'z ichiga olgan fayl.

Keyin asosiy skriptingizdan foydalana olasiz

import site
site.addsitedir(".")

u avtomatik ravishda PYTHONPATH katalogiga qo'shiladi.

1
qo'shib qo'ydi

Siz ishlaydigan operatsion tizim haqida gapirmadingiz. Ushbu javobning aksariyati Linux (yoki Unix-ga o'xshash) muhitni nazarda tutadi. Agar siz Windows-da bo'lsangiz, boshqa birovning suhbatga o'tishlari kerak bo'ladi.

Sizning bu misolingizdan nima uchun bu tortishuvlarning barchasini boshdan kechirayotganingiz aniq emas. Birinchidan, PYTHONPATH kodini qanday qilib o'zgartira olmaysiz? Bu faqat qobiq atrof-muhit o'zgaruvchisidir. Agar siz Python-ga kirsangiz va ishga tushirsangiz, siz o'zingizning atrof-muhit parametrlarini o'rnatish uchun kerakli tarzda foydalanishingiz mumkin.

Lekin men bu kerakli ekaniga amin emasman. Agar siz barcha maxsus modullarni o'z kutubxona katalogingizga o'rnatgan bo'lsangiz va vinilios tomonidan tavsiya etilgan .pth fayllarini o'rnatib qo'ygan bo'lsangiz, siz shunday qila olasiz:

import site
import os

site.addsitedir(os.path.expanduser('~/lib/python'))

Siz o'zingizning Python muhitingizni yaratishga imkon beruvchi virtualenv to'plamiga qarashni xohlashingiz mumkin. Siz o'z paketlaringizni o'rnatishingiz mumkin. Python tizimida mavjud bo'lmagan modullarni o'rnatish kerak bo'lganda juda qulay.

0
qo'shib qo'ydi
Python
Python
372 ishtirokchilar

Bu guruh python dasturlash tilini muhokama qilish uchun. Iltimos, o'zingizni hurmat qiling va faqat dasturlash bo'yicha yozing. Botlar mavzusini @botlarhaqida guruhida muhokama qling! FAQ: @PyFAQ Offtopic: @python_uz_offtopic

Python offtopic group !
Python offtopic group !
150 ishtirokchilar

@python_uz gruppasining offtop gruppasi. offtop bo'lsa ham reklama mumkin emas ) Boshqa dasturlash tiliga oid gruppalar @languages_programming