Tôi đang cố gắng tạo điểm nhập cho phương thức chính trong một trong các mô-đun python của mình và có vẻ như đang gặp sự cố khi nhập mô-đun nơi hàm đó hoạt động.trong quá trình load_entry_point trong Python
setup.py của tôi trông như thế này:
...
setup(name="awesome-tool",
...,
entry_points={
'console_scripts' : [
'awesome-tool = awesome_tool.awesome_tool:main'
]
}
)
Dự án được tổ chức như thế này:
awesome_tool
|__ awesome_tool.py
|__ __init__.py
Đó là awesome_tool.py
có chứa một hàm gọi là main() mà tôi muốn làm cho có sẵn trong một tệp thi hành được gọi là awesome-tool
. Khi thực thi setup.py, tất cả dường như hoạt động tốt. Tôi có thể bắt đầu một dấu nhắc python và làm
> import awesome_tool.awesome_tool
> # (all good here)
Nhưng khi tôi cố gắng gọi awesome-tool
từ dòng lệnh, đây là những gì sẽ xảy ra:
Traceback (most recent call last):
File ".../virtualenvs/awesome-tool/bin/awesome-tool", line 9, in <module>
load_entry_point('awesome-tool==1.1.0', 'console_scripts', 'awesome-tool')()
File "build/bdist.macosx-10.9-intel/egg/pkg_resources.py", line 378, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "build/bdist.macosx-10.9-intel/egg/pkg_resources.py", line 2566, in load_entry_point
return ep.load()
File "build/bdist.macosx-10.9-intel/egg/pkg_resources.py", line 2260, in load
entry = __import__(self.module_name, globals(),globals(), ['__name__'])
ImportError: No module named awesome_tool.awesome_tool
gì? Không phải tôi chỉ có thể nhập khẩu này từ vỏ python? Tôi nghi ngờ rằng có điều gì đó buồn cười xảy ra với con đường python, nhưng tôi đã không thể chẩn đoán được vấn đề. Bất kỳ ý tưởng?
Các dòng có vấn đề trong awesome-tool
thực thi được cung cấp bởi setup.py
dường như sau:
from pkg_resources import load_entry_point
load_entry_point("awesome-tool==1.1.0", "console_scripts", "awesome-tool")()
Ngoài ra, tôi nhận ra rằng nó rất kỳ lạ để có cả một gói và mô-đun phần cùng tên ("awesome_tool"), nhưng đây là mã tôi đã kế thừa và tôi không muốn phá vỡ khả năng tương thích ngược với đổi tên, mặc dù điều này có thể là không thể tránh khỏi trong tương lai. Nếu có thể, tôi muốn giữ tên như bây giờ.
Làm thế nào để bạn "gọi 'tuyệt vời-tool' từ dòng lệnh"? Thư mục làm việc hiện tại là gì khi bạn làm như vậy? Thư mục làm việc khi bạn thử chạy Python là gì? – abarnert
Tôi đang gọi thư mục 'awesome-tool' ở phía trên nội dung gói (ví dụ' awesome_tool/.. ') và trình thông dịch python trong cùng một vị trí, nhưng khi tôi' cd' vào một thư mục khác và thử trình thông dịch python trên một lần nữa , Tôi nhận được 'ImportError'. Đó là tiến bộ! Cảm ơn bạn. – llovett