Tôi cũng đăng một câu trả lời tương tự cho câu hỏi liên quan đến hàng nhập khẩu từ các gói anh chị em. Bạn có thể thấy nó ở đây .
Giải pháp không sys.path
hack
Tóm lược
- Gói mã vào một thư mục (ví dụ
packaged_stuff
)
- Sử dụng tạo
setup.py
tập lệnh trong đó bạn sử dụng setuptools.setup () .
- Pip cài đặt gói ở trạng thái có thể chỉnh sửa với
pip install -e <myproject_folder>
- Nhập khẩu bằng cách sử dụng
from packaged_stuff.modulename import function_name
Thiết lập
Tôi giả sử cấu trúc thư mục giống như trong câu hỏi
.
└── ptdraft
├── __init__.py
├── nib.py
└── simulations
├── __init__.py
└── life
├── __init__.py
└── life.py
Tôi gọi .
thư mục gốc, và trong trường hợp của tôi, nó nằm ở C:\tmp\test_imports
.
Các bước
1) Thêm a setup.py
vào thư mục gốc
Nội dung của setup.py
có thể chỉ đơn giản là
from setuptools import setup, find_packages
setup(name='myproject', version='1.0', packages=find_packages())
Về cơ bản "bất kỳ" setup.py
sẽ làm việc. Đây chỉ là một ví dụ làm việc tối thiểu.
2) Sử dụng môi trường ảo
Nếu bạn quen thuộc với môi trường ảo, hãy kích hoạt một và bỏ qua bước tiếp theo. Việc sử dụng môi trường ảo không hoàn toàn bắt buộc, nhưng chúng thực sự sẽ giúp bạn trong thời gian dài (khi bạn có hơn 1 dự án đang diễn ra ..). Các bước cơ bản nhất là (chạy trong thư mục gốc)
- Tạo env ảo
- Kích hoạt env ảo
. /venv/bin/activate
(Linux) hoặc ./venv/Scripts/activate
(Thắng)
Để tìm hiểu thêm về điều này, chỉ cần Google tìm ra "hướng dẫn python virtualenv" hoặc tương tự. Bạn có thể không bao giờ cần bất kỳ lệnh nào khác ngoài việc tạo, kích hoạt và hủy kích hoạt.
Khi bạn đã tạo và kích hoạt một môi trường ảo, bảng điều khiển của bạn sẽ đặt tên của môi trường ảo trong ngoặc đơn
PS C:\tmp\test_imports> python -m venv venv
PS C:\tmp\test_imports> .\venv\Scripts\activate
(venv) PS C:\tmp\test_imports>
3) Pip cài đặt dự án của bạn ở trạng thái có thể chỉnh sửa
Cài đặt gói cấp cao nhất của bạn myproject
bằng cách sử dụng pip
. Mẹo nhỏ là sử dụng -e
cờ khi thực hiện cài đặt. Bằng cách này, nó được cài đặt ở trạng thái có thể chỉnh sửa và tất cả các chỉnh sửa được thực hiện cho các tệp .py sẽ được tự động đưa vào gói đã cài đặt.
Trong thư mục gốc, hãy chạy
pip install -e .
(lưu ý dấu chấm, nó là viết tắt của "thư mục hiện tại")
Bạn cũng có thể thấy rằng nó được cài đặt bằng cách sử dụng pip freeze
(venv) PS C:\tmp\test_imports> pip install -e .
Obtaining file:///C:/tmp/test_imports
Installing collected packages: myproject
Running setup.py develop for myproject
Successfully installed myproject
(venv) PS C:\tmp\test_imports> pip freeze
myproject==1.0
4) Nhập bằng cách trả trước mainfolder
cho mỗi lần nhập
Trong ví dụ này, mainfolder
sẽ là ptdraft
. Điều này có lợi thế là bạn sẽ không gặp phải xung đột tên với các tên mô-đun khác (từ thư viện tiêu chuẩn python hoặc mô-đun bên thứ 3).
Cách sử dụng ví dụ
nib.py
def function_from_nib():
print('I am the return value from function_from_nib!')
cuộc sống
from ptdraft.nib import function_from_nib
if __name__ == '__main__':
function_from_nib()
Chạy life.py
(venv) PS C:\tmp\test_imports> python .\ptdraft\simulations\life\life.py
I am the return value from function_from_nib!