2010-02-17 6 views
13

Tôi có một số mã mà tôi đang cố gắng làm cho nó phát độc đáo với bộ xử lý địa lý của ESRI. Tuy nhiên, bộ xử lý địa lý của ESRI chạy trên Python 2.2, 2.3, 2.4, 2.5. Chúng tôi cần phải làm cho các công cụ của chúng tôi hoạt động trên mọi phiên bản. Vì vậy, tôi đã dành rất nhiều thời gian làm việc và mã hóa cách giải quyết cho các phiên bản khác nhau, chẳng hạn như trình bao geoprocessor có chức năng giống hệt nhau trên tất cả các phiên bản. Đây là điều quan trọng, có một số ứng dụng về cơ bản có thể quét các mô-đun để xem cú pháp và phương pháp của nó có tương thích ngược với phiên bản Python ở trên không? Không.Cách xem mã có tương thích ngược với Python không?

Thật không may, tôi không thể cài đặt Python 2.2 vì tôi có Arcgis 9.3, yêu cầu Python 2.5. Và ngược lại, tôi đã nhận được khá nhiều tất cả các phụ thuộc module được sắp xếp và làm việc. (win32com, ctypes, v.v.).

Nhưng tôi lo lắng về mã thực sự của mình, tôi có thể dành hàng giờ đọc và đọc những từ khóa nào được thêm vào cho phiên bản nào, tuy nhiên điều này về cơ bản sẽ là một nhức đầu lớn. Có một số loại ứng dụng thực hiện những điều này không?

+0

bản sao có thể có của [Công cụ để xác định phiên bản Python thấp nhất được yêu cầu?] (Http://stackoverflow.com/questions/804538/tool-to-determine-what-lowest-version-of-python-required) –

Trả lời

11

Nếu bạn đang tích cực phát triển một sản phẩm thương mại, và bạn -really- muốn hỗ trợ tất cả các phiên bản này đúng, tôi xin đề nghị:

  1. Viết một bộ kiểm tra tự động có thể chạy và kiểm tra chức năng cho toàn bộ thư viện/ứng dụng của bạn/bất kỳ thứ gì.

  2. Thiết lập máy hoặc máy ảo lý tưởng cho từng môi trường thử nghiệm (trăn 2.2-2.6 và bất kỳ kết hợp nền tảng nào nếu sản phẩm của bạn không chỉ là win32). Điều này đặc biệt dễ thực hiện hiện nay do có một số sản phẩm ảo hóa miễn phí hiện nay (VirtualBox và VMWare Server, để đặt tên cho hai)

  3. Sử dụng một cái gì đó như buildbot để tự động chạy thử nghiệm trên tất cả các nền tảng khác và thu thập kết quả .

Tôi có thể đề cập đến tuy nhiên, đã có những thay đổi đáng kể giữa 2,2 và 2,3 và một lần nữa giữa 2,3 và 2,4. Đây là lý do tại sao hầu hết các thư viện python chỉ hỗ trợ 2.3 và một số đang chuyển sang chỉ hỗ trợ phiên bản 2.4 trở lên.

Mỗi bản phát hành lớn có một "Có gì mới trong python 2.x" tài liệu, nhưng mã hóa cho 2.2 có nghĩa là bạn bỏ lỡ:

  • phát (2.3) (cũng trên thực tế, bạn có thể nhận được chúng trong 2.2 với from __future__ import generators)
  • Generator biểu (2,4)
  • module subprocess (2,4)
  • Decorator cú pháp (2,4)
  • bộ (2.3) 012.347.
  • số thập phân (2.4, nhưng có thể được backported)
  • datetime (2.3)
  • itertools (2,3)

Chỉ cần đến tên một nhóm rất nhỏ điều tuyệt vời bạn có lẽ không thể có. Bạn phải thực sự cân nhắc xem bạn muốn hỗ trợ phiên bản python 7 năm tuổi như thế nào, và bỏ lỡ rất nhiều tính năng thú vị có thể làm giảm kích thước mã của bạn (hoặc có thể chỉ tăng khả năng đọc).

+0

Khoảng trung bình nhiều hơn thì 50% người dùng arcgis vẫn đang sử dụng 9.1/9.0. Cần 2,3 hoặc 2,2 tương ứng. Bạn không thể sử dụng các mô-đun python của họ mà không có phiên bản tương ứng của python mà họ yêu cầu. Nó hút tôi biết. Nhưng ESRI không thực sự đưa ra một cái chết tiệt. Espcially khi có 3 API khác nhau, 9.3 có api pythonic, 9.2 không thực sự là pythonic nhưng làm mọi thứ thông qua liệt kê. 9,1 và thấp hơn sử dụng một bizzare mishmash của thư viện COM tùy chỉnh và win32com.client.Dispatch. Nó hút tôi biết. – UberJumper

+0

Dường như bạn có thể có nhiều lợi ích từ các bộ thử nghiệm tự động và từ buildbot. Đặc biệt, nếu bạn muốn sản phẩm của bạn hoạt động giống với 3 API khác nhau, một số thử nghiệm hồi quy được suy nghĩ tốt sẽ trả cổ tức lớn cho tương lai. Nhiều dự án có buildbots của họ được cấu hình để chạy với mọi cam kết VCS, và sau đó gửi email cho họ nếu bất kỳ kiểm tra thất bại. Điều này có thể stomp mới được giới thiệu lỗi nhanh hơn nhiều. – Crast

9

Hãy thử pyqver: https://github.com/ghewgill/pyqver/

Cung cấp cho bạn phiên bản tối thiểu cho cho kịch bản python phân tích các từ khóa và các module sử dụng.

Ngoài ra, bạn có thể biên dịch trăn địa phương 2.2 và sử dụng virtualenv để tạo môi trường python 2.2 với cờ --python.

+0

virtualenv yêu cầu setuptools, yêu cầu python 2.3.5 trở lên. Ngoài ra, một cái nhìn nhanh chóng tại virtualenv.py chính nó cho thấy nó nhập khẩu vào "đăng nhập", mà chỉ có sẵn bắt đầu python 2.3. Nó cũng yêu cầu mô-đun "subprocess" từ 2.4, có thể được backported thành 2.3, nhưng ngay cả bản thân mã chỉ thừa nhận nhiều như "có lẽ sẽ làm việc" về cái đó. Có, python 2.2 thực sự là kết thúc của cuộc sống, và không được hỗ trợ ngay cả bởi rất nhiều công cụ hữu ích trên mạng. – Crast

+0

Thats tuyệt vời. Tôi sẽ bắn một chút. Nhưng thực sự chỉ nhìn vào những thứ nhất định. Tôi nghĩ tôi sẽ cuộn tròn và khóc. – UberJumper

+0

Ngoài ra tôi không thể cài đặt phiên bản cấp thấp hơn của python vì chúng sẽ chặn tôi sử dụng bất kỳ thư viện python geoprocessing geoprocessing nào mà tôi đã cài đặt. Nó cần phải là một phiên bản phù hợp, tôi không thể cài đặt thêm sau đó một phiên bản của arcgis trên một máy. Vì vậy, tôi nghĩ rằng tôi sẽ xem xét đấm bốc ảo và xem những gì tôi có thể làm. Ugh. – UberJumper