Tôi có một setup.py mà cần phải hỗ trợ cả hai Python 2 và 3.Các thử nghiệm không được hội tụ bởi 2to3 trong setup.py?
Mã này hiện đang hoạt động và là cài đặt bằng Python 2.x
Nếu tôi thêm mệnh đề use_2to3 = True
để setup.py của tôi, sau đó các mô-đun có thể cài đặt bằng Python 3, tuy nhiên, làm một:
python setup.py test
Nguyên nhân thất bại là một trong những bài kiểm tra sử dụng lớp StringIO, và dòng nhập khẩu goofs bằng Python 3 (đó là hiện from StringIO import StringIO
, nơi trong Python3 nó phải là from io import StringIO
Tôi nghĩ rằng mặc dù bạn thêm từ khóa use_2to3 tất cả các kiểm tra (bao gồm cả unittests) đã được xử lý bởi 2to3 trước khi được kiểm tra.
Tôi đang thiếu gì? Trong trường hợp nó giúp, phần lớn các setup.py của tôi trông giống như:
from setuptools import setup
setup(
name='myproject',
version='1.0',
description='My Cool project',
classifiers = [
'Programming Language :: Python',
'Programming Language :: Python :: 3',
],
py_modules=['mymodule'],
test_suite='test_mymodule',
zip_safe=False,
use_2to3 = True,
)
Chỉnh sửa: lý do tôi cảm thấy như thể 2to3 là không nhận được chạy trên một python setup.py test
là nó thổi lên & dưới cùng của stacktrace đọc:
File "/home/aparkin/temp/mymodule/test_mymodule.py", line 18, in <module>
from StringIO import StringIO
Nhưng nếu tôi chạy 2to3 trên test_mymodule.py, sau đó dòng nhập khẩu nên đã được làm lại để:
from io import StringIO
Và (lúc tồi tệ nhất) các bài kiểm tra nên chỉ ind thất bại.
Bạn có ý nghĩa gì với gói phụ của mymodule.tests? –
Tôi có nghĩa là tạo một gói có tên là "mymodule" và dưới nó tạo ra một thư mục có tên là "tests" và đặt tất cả các module test của bạn vào đó, nhớ bao gồm '__init __. Py'as để kiểm tra là một gói con của mymodule (do đó mymodule.tests) – Iguananaut