مشکل در کاربرد نقطه در ایمپورت کردن
-
سلام.
من دارم کاربرد نقطه در import کردن را یاد میگیرم ولی وقتی میخواهم مثالها را خودم انجام بدم، نمیتوانم.
مثلاً من یک پوشه به نام package2 دارم که این دو تا فایل را دارد:package2 ├── __init__.py (empty) └── mathi.py
در فایل mathi.py هم این نوشته شده:
print('math runs') def f(): print('func runs')
وقتی در پوشهی package2 کنسول را باز میکنم. نمیتوانم mathi.py را ایمپورت کنم:
>>> from .mathi import f Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: attempted relative import with no known parent package >>> from . import mathi Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: attempted relative import with no known parent package
خلاصه هر کاری میکنم همین ارور را میدهد.
کسی میداند کجای کارم مشکل دارد؟
-
سلام
نیازی به نقطه در اول اسم ماژول نیست چون که شما دارید در همون مسیر ایمپورت می کنید.
ایمپورت رو بدون نقطه و به این شکل انجام بدید:from mathi import f print(f())
-
خب هدف اصلی من این است که بفهمم آن نقطه دارد چه کار میکند. اگر میشود یک مثالی بزنید که آن نقطه را داشته باشد.
-
ساختار پروژه تون رو اجازه بدید کمی گسترش بدم:
package2 ├── __init__.py (empty) └── mathi.py └── dir1 └── dir1-1 └── module1-1.py └── module1.py └── module2.py └── dir2 └── module1.py └── module2.py
از اون جایی که دایرکتوری اصلی پروژه شما
package2
هست پس اگر بخوایم یک ماژولی که در خود این دایرکتوری هست (ساب دایرکتوری مثل dir1 و dir2 منظورم نیست) رو اجرا کنیم به این شکل میشه:from mathi import f
اگر بخوایم یک ماژول از
dir1
ایمپورت کنیم:from dir1.module1 import *
و یک ماژول از
dir1-1
ایمپورت کنیم:from dir1.dir1-1.module1-1 import *
-
متشکر از راهنماییتون.
من در واقع میخواستم relative import را یاد بگیرم.
راه حل ارور را در یک سایت پیدا کردم.از وقتی که گذاشتید متشکرم
-
بسیار عالی، خواهش میکنم.
تاپیک بسته شد. -