å½éå°æ æ³å¯¼å
¥æ个python模åæ¶ï¼å¯è½ä¼æ¯æ²¡æå®è£
æ个模åï¼ä¹æå¯è½æ¯æ模åå¨å è½½è¿ç¨ä¸å¤±è´¥ï¼ä¹æå¯è½æ¯é·å
¥äºå¾ªç¯å¯¼å
¥çé®é¢ãæ¬æ详ç»è§£éäºè¿ä¸ªé®é¢ã
1. 模åæªå®è£
æè
è·¯å¾ä¸å¯¹
ImportError: No mudule named myModule
æ两ç§å¯è½ï¼ä¸æ¯è¯¥æ¨¡å没æå®è£
ï¼ä¸è¬å¯ä»¥ç¨
pip install %module_name%
æ¥è§£å³ã注æææ¶å模åå®è£
å
å并ä¸çäºè¦å¯¼å
¥ç模ååãè¿ç§æ
åµä¸å¯ä»¥éè¿pip search | listå½ä»¤æ¥å°è¯æ¾å°æ£ç¡®çå
ã
å¦ä¸ç§æ
åµå°±æ¯å
è½ç¶å®è£
äºï¼ä½å½åè¿è¡çç¨åºå è½½çè·¯å¾æéãpythonè¿è¡æ¶å°ä»ä»¥ä¸ä½ç½®å°è¯å è½½python modules:
* å½åç®å½
* ç¯å¢åé$PYTHONPATHææ示çå¼ï¼è¿æ¯ä¸ä¸ªç±âï¼âåéçå符串ï¼å个åå符串é½æ¯æ件系ç»çä¸ä¸ªè·¯å¾ã
* æ ååºç®å½ï¼å¦dist-site-packagesä¸ç模åã
* å¨.pthæ件ä¸æå®çè·¯å¾ï¼å¦æåå¨.pthæ件çè¯ã
å¯ä»¥ä½¿ç¨ä»¥ä¸æ¹å¼æ¥æ¥çpythonè¿è¡æ¶çå
å«è·¯å¾ï¼
?
12
import sysprint(sys.path)
å¨è¿è¡åºéçèæ¬è£
头é¨å ä¸è¿ä¸æ®µä»£ç ï¼ç¶åå¨æ§å¶å°ä¸æ¥çæå°åºæ¥çpythonç±»åºè·¯å¾ï¼æ£æ¥å®è£
å
æ¯å¦å·²å
å«å¨ä¸è¿°è·¯å¾ä¸ã
***å¯ä»¥éè¿ä¸é¢çæ¹å¼å°æªå
å«å¨è·¯å¾ä¸ç模å临æ¶å
å«è¿æ¥ï¼***
sys.path.append("path/to/module")
å¦å¤ï¼è¿å¯ä»¥å¨shellçªå£ä¸æ¥çå½åçpythonå
å«è·¯å¾ï¼
echo $PYTHONPATH
2. æ æ³å¯¼å
¥å·²åå¨ç模å
å¦æè¦å¯¼å
¥ç模åå
å«äºnative代ç ï¼å¹¶ä¸native代ç å è½½ï¼åå§åï¼å¤±è´¥æ¶ï¼å°±ä¼å¯¼è´è¿ç§é误ã使ç¨ssl,
geventçæ¶ånativeç模åæ¶ï¼å¦æ对åºçnativeç¨åºå¹¶æªå®è£
ï¼åä¼åºç°è¿æ ·çé误ã
å¦ä¸ç§é误æ
åµæ¯ï¼ä½¿ç¨ç¸å¯¹è·¯å¾å¯¼å
¥æ¶ï¼ç¶æ¨¡åè¿æªå¯¼å
¥æåãè§ä¸é¢ç代ç ï¼
?
12345
main.pymypackage/ __init__.pymymodule.pymyothermodule.py
mymodule.pyå¦ä¸æ示ï¼
?
123456789101112
#!/usr/bin/env python3 # Exported functiondef as_int(a): return int(a) # Test function for module def _test(): assert as_int('1') == 1 if __name__ == '__main__': _test()
以åmyothermodule代ç å¦ä¸æ示ï¼
?
1234567891011121314
#!/usr/bin/env python3 from .mymodule import as_int # Exported functiondef add(a, b): return as_int(a) + as_int(b) # Test function for module def _test(): assert add('1', '1') == 2 if __name__ == '__main__': _test()
å¦ææ§è¡mypackage/myothermoduleï¼åä¼æ¥ä»¥ä¸é误ï¼
Traceback (most recent call last):
File "myothermodule.py", line 3, in
<module>
from .mymodule import as_int
SystemError: Parent module
'' not loaded, cannot perform relative import
[è¿ç¯æç« ](#Relative imports in
Python 3)ç»åºäºæ´è¯¦ç»ç解çã
3. 循ç¯å¯¼å
¥
è¿ç§é误称ä¹ä¸º"circular (or cyclic) imports"ãæ¯pythonç¬æçä¸ç§å¯¼å
¥é误ï¼å¨è±¡javaè¿æ ·çè¯è¨ä¸å°±ä¸åå¨ã
å设æå¦ä¸ä¸¤ä¸ªæ件ï¼a.pyåb.pyï¼
?
1234567
#a.pyprint "a in"import sysprint "b imported: %s" % ("b" in sys.modules, )import bprint "a out"print b.x
以å:
?
12345
#b.pyprint "b in"import aprint "b out"x = 3
æ§è¡python a.pyï¼å°å¾å°ä»¥ä¸ç»æï¼
?
123456789101112131415
$ python a.pya in b imported: Falseb ina inb imported: Truea outTraceback (most recent call last): File "a.py", line 4, in <module> import b File "/home/shlomme/tmp/x/b.py", line 2, in <module> import aFile "/home/shlomme/tmp/x/a.py", line 7, in <module> print b.xAttributeError: 'module' object has no attribute 'x'
åºç°è¿ç§æ
åµçåå æ¯äº§çäºå¾ªç¯å¯¼å
¥ã循ç¯å¯¼å
¥ï¼ä»¥åå¨å¯¼å
¥è¿ç¨ä¸pythonè¿è¡äºå éæä½ï¼æç»å¯¼è´å¨æ¨¡åbæªå¯¼å
¥å®ææ¶å°±å¼ç¨äºå
¶ä¸çååã
å¤æ导å
¥é误æ¯å¦æ¯å 为循ç¯å¯¼å
¥å¼èµ·çï¼ä¸»è¦çå æ ä¸æ¯å¦åºç°ä¸¤æ¬¡éå¤ç导å
¥ãæ¯å¦ä¸è¿°å æ ä¸a.pyåºç°ä¸¤æ¬¡ï¼å æ¤å¯ä»¥å¤ææ¯è¿ä¸ªæ件å¼èµ·ç循ç¯å¯¼å
¥ã
è¦è§£å³è¿ä¸ªé®é¢ï¼å¯ä»¥æ模åçæä¸ç§èµæºï¼å¯¹ææè¦å¼å
¥ç模åè¿è¡ç¼å·ï¼åæéæèµæºæåºæ³é¡ºæ¬¡å¯¼å
¥ï¼å°±å¯ä»¥é¿å
循ç¯å¯¼å
¥ã
温馨提示:答案为网友推荐,仅供参考