Không thể import thư viện
Closed this issue · 7 comments
Mô tả lỗi
Không thể import thư viện, báo lỗi TypeError: 'type' object is not subscriptable
Cách tái hiện lại lỗi để xử lý
Các bước để tái hiện sự cố:
- Chạy lệnh cài đặt: pip install vnstock
- Sử dụng Pycharm hoặc Jupyter Notebook, chạy code mẫu của tác giả (https://colab.research.google.com/github/thinh-vu/vnstock/blob/beta/docs/gen2_vnstock_demo_index_all_functions_testing_2023.ipynb#scrollTo=kfKcYDxc6wlu)
- Gặp lỗi
Mong muốn đạt được
Code chạy bình thường.
Máy tính để bàn (vui lòng cung cấp thông tin sau):
- Hệ điều hành: Ubuntu 20.04
- Phiên bản: 0.2.8.7, nguồn Pypi
Cám ơn bạn đã chia sẻ. Lỗi này hiện không xuất hiện với Google Colab. Mình sẽ kiểm tra thêm với môi trường local như bạn mô tả.
@andrey-jef ơi, bạn có thể giúp mình xem chi tiết lỗi này với nhé. Như phần báo lỗi có liên quan đến module funds.py
. Cám ơn bạn!
@thinh-vu local env của b OP đang là python 3.8. Vnstock đang hỗ trợ cài đặt mặc định là python 3.9 trong requirements
từ 3.9 thì list
là built-in class nên m và b test sẽ ko thấy lỗi này
Có 2 giải pháp:
1/ là OP update python lên 3.9 trong venv của b ấy
2/ nếu vẫn muốn dùng 3.8 thì cần thêm câu lệnh này vào trước khi import vnstock
from typing import List
m chưa test thử cái m nói. Nhưng logic m hiểu thì chỉ có thể là trường hợp như vậy thôi
mình thử cách 1 thì đã chạy được, còn cách 2 vẫn bị lỗi
trong file setup.cfg mình thấy để python>=3.7, chắc cần sửa lại, và add bs4 vào file requirements.txt nữa
Code mẫu mình chạy thử trên VSC cũng báo lỗi ạ. Python mình bản 3.12.0
Hi @DangThuy-97
m ko tái hiện được lỗi này trên vnstock 0.2.8.7
Với câu lệnh
company_insider_deals (symbol='FPT', page_size=20, page=0)
Thì có kết quả trả về như mong đợi
ticker dealAnnounceDate dealMethod dealAction dealQuantity \
0 FPT 2023-10-12 Cổ đông nội bộ Bán -2250000.0
1 FPT 2023-10-12 Cổ đông sáng lập Mua 550000.0
2 FPT 2023-10-03 Cổ đông sáng lập Mua 500000.0
3 FPT 2023-10-02 Cổ đông sáng lập Mua 250000.0
4 FPT 2023-10-02 Cổ đông sáng lập Mua 500000.0
5 FPT 2023-08-29 Cổ đông lớn Mua 20000.0
6 FPT 2023-08-29 Cổ đông lớn Mua 68600.0
7 FPT 2023-08-29 Cổ đông lớn Mua 495000.0
8 FPT 2023-07-31 Cổ đông nội bộ Bán -4000000.0
14 FPT 2023-05-11 Cổ đông nội bộ Mua 220993.0
17 FPT 2023-05-11 Cổ đông nội bộ Mua 520645.0
16 FPT 2023-05-11 Cổ đông nội bộ Mua 470289.0
15 FPT 2023-05-11 Cổ đông nội bộ Mua 340628.0
10 FPT 2023-05-11 Cổ đông nội bộ Mua 59419.0
13 FPT 2023-05-11 Cổ đông nội bộ Mua 178048.0
12 FPT 2023-05-11 Cổ đông nội bộ Mua 75912.0
11 FPT 2023-05-11 Cổ đông nội bộ Mua 72580.0
9 FPT 2023-05-11 Cổ đông nội bộ Mua 16129.0
18 FPT 2023-02-17 Cổ đông nội bộ Bán -70000.0
19 FPT 2022-12-27 Cổ đông lớn Mua 0.0
dealPrice dealRatio
0 96400.0 -0.003
1 96400.0 -0.003
2 92200.0 0.042
3 93200.0 0.031
4 93200.0 0.031
5 93600.0 0.027
6 93600.0 0.027
7 93600.0 0.027
8 84607.0 0.136
14 67206.0 0.430
17 67206.0 0.430
16 67206.0 0.430
15 67206.0 0.430
10 67206.0 0.430
13 67206.0 0.430
12 67206.0 0.430
11 67206.0 0.430
9 67206.0 0.430
18 69330.0 0.386
19 64997.0 0.479
Các bạn có thể hot fix lỗi này trong package của vnstock trên máy của bạn như sau. Mình đã test trên Raspberry Pi 4
- Mở terminal/command prompt chạy lệnh sau để mở thư mục python package:
python -m site --user-site
, Lưu ý: nếu máy bạn chạy nhiều hơn 1 bản python (Windows) hoặc trên linux có thể cần thay thếpython
thànhpython3.10
hoặcpython3
tương ứng. - Tìm thư mục
vnstock
trong thư mục package ở trên, ví dụ trong raspberry của mình là/home/pi/.local/lib/python3.8/site-packages/vnstock
- Mở file funds.py bằng Visual Studio hoặc bất kỳ text editor nào dưới dạng văn bản để chỉnh sửa.
- Thay thế đoạn code từ dòng 1 đến 16 với đoạn code sau:
from .config import *
from typing import List
# UTILS
def convert_unix_to_datetime(df_to_convert: pd.DataFrame, columns: List[str]) -> pd.DataFrame:
"""Converts all the specified columns of a dataframe to date format and fill NaN for negative values."""
df = df_to_convert.copy()
for col in columns:
df[col] = pd.to_datetime(df[col], unit='ms', utc=True, errors='coerce').dt.strftime('%Y-%m-%d')
df[col] = df[col].where(df[col].ge('1970-01-01'))
return df
- Lưu file và quay lại môi trường Python để chạy và import thử.
Các bạn làm thử và báo giúp mình nếu thành công hoặc lỗi trên máy của bạn.
Tụi mình sẽ xem xét lỗi này kỹ hơn sau lễ.
Mình đã chạy Code được lại bình thường, cám ơn team rất nhiều !