Chạy Python 2.6.1 trên OSX, sẽ triển khai tới CentOS. Muốn có một gói để được gọi từ một dòng lệnh như thế này:Chạy gói python
python [-m] tst
Cho rằng, đây là cấu trúc thư mục thực hiện:
$PYTHONPATH/
tst/
__init__.py # empty
__main__.py # below
dep.py # below
Sau đây là trong các tập tin:
$ cat tst/__main__.py
from .dep import DepClass
print "Hello there"
$ cat tst/dep.py
class DepClass(object):
pass
$
Tuy nhiên, trăn mang lại cho tôi mâu thuẫn chẩn đoán:
$ python -m tst
/usr/bin/python: tst is a package and cannot be directly executed
OK, vì vậy nó được công nhận là một gói. Vì vậy, tôi sẽ có thể chạy nó như là một kịch bản? Nó có __main__
...
$ python tst
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/runpy.py", line 121, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/runpy.py", line 34, in _run_code
exec code in run_globals
File "/Users/vdidenko/Code/emi/tst/__main__.py", line 1, in <module>
from .dep import DepClass
ValueError: Attempted relative import in non-package
Tại thời điểm này tôi bị mất. Tại sao lại là non-package
? Và làm thế nào để cấu trúc mã sau đó?
Không phải là quảng cáo, phản ứng khác nhau khi chạy với [-m], giải pháp khác nhau. Mặc dù âm thanh gần. Sự cố này không thể thêm '.__ main__' khi đang chạy, sự cố khác đã thêm nó đúng cách. –