Nếu bạn "thử nghiệm" libA-dev sử dụng libT phụ thuộc vào libA (ổn định), thì bạn không thực sự thử nghiệm libA-dev vì nó sẽ hoạt động trong môi trường sản xuất. Cách duy nhất để thực sự kiểm tra libA-dev là lấy đi toàn bộ và làm cho libT phụ thuộc vào libA-dev. Nếu điều này phá vỡ các bài kiểm tra đơn vị của bạn thì đó là một điều tốt - nó cho bạn thấy những gì cần phải được cố định.
Nếu bạn không có bài kiểm tra đơn vị, thì đây là lúc bắt đầu thực hiện chúng (sử dụng libA và libT ổn định trước!).
Tôi khuyên bạn nên sử dụng "hệ thống kiểm soát phiên bản" (ví dụ: bzr, hg, svn, git). Sau đó, bạn có thể tạo các nhánh của dự án, "ổn định" và "devA".
Để làm việc trên nhánh Deva, trước tiên bạn sẽ chạy
export PYTHONPATH=/path/to/devA
Bằng cách đảm bảo các biến môi trường PYTHONPATH không bao gồm các ngành khác, bạn yên tâm Python được sử dụng chỉ các module mà bạn mong muốn.
Khi đến lúc hợp nhất mã từ dev -> ổn định, phần mềm điều khiển phiên bản cũng sẽ cung cấp cách dễ dàng để thực hiện điều đó.
Kiểm soát phiên bản cũng cho phép bạn mạnh hơn - thử những thay đổi lớn không đáng sợ. Nếu mọi thứ không hoạt động, việc hoàn nguyên sẽ trở nên cực kỳ dễ dàng. Giữa điều đó và thủ thuật PYTHONPATH, bạn luôn có thể trở lại với mã đã biết, đang hoạt động.
Nếu bạn cảm thấy ở trên chỉ đơn giản là không làm việc cho bạn, và bạn phải sử dụng libT-which-depends-on-libA để kiểm tra libA-dev, thì bạn cần phải đổi tên tất cả các mô-đun và sửa đổi tất cả các câu lệnh nhập khẩu để phân biệt rõ ràng giữa libA-dev và libA. Ví dụ, nếu libA có một mô-đun được gọi là moduleA.py, thì hãy đổi tên nó thành moduleA_dev.py.
Lệnh
rename -n 's/^(.*)\.py/$1_dev.py/' *.py
sẽ thêm "_dev" cho tất cả các file * .py. (Với cờ "-n", lệnh đổi tên sẽ chỉ hiển thị cho bạn việc đổi tên dự tính. Hãy xóa "-n" để thực sự thực hiện với nó.)
Để trở lại việc đổi tên, chạy
rename -n 's/^(.*)_dev\.py/$1.py/' *.py
Tiếp theo, bạn sẽ cần phải thay đổi tất cả các tham chiếu tới moduleA để moduleA_dev trong mã. Lệnh
find /path/to/LibA-dev/ -type f -name '*.py' -exec sed -i 's/moduleA/moduleA_dev/g' {} \;
sẽ làm thay đổi tất cả các file * .py trong Liba-dev, thay đổi "moduleA" -> "moduleA_dev".
Hãy cẩn thận với lệnh này. Nó là nguy hiểm, bởi vì nếu bạn có một biến được gọi là moduleAB thì nó sẽ được đổi tên thành moduleA_devB, trong khi những gì bạn thực sự muốn có thể là moduleAB_dev.
Để trở lại sự thay đổi này (tùy thuộc vào sự báo trước ở trên),
find /path/to/LibA-dev/ -type f -name '*.py' -exec sed -i 's/moduleA_dev/moduleA/g' {} \;
Khi bạn tách các không gian tên, bạn đã phá vỡ sự phụ thuộc tròn. Một khi bạn đã thỏa mãn libA-dev của bạn là tốt, bạn có thể thay đổi moduleA_dev.py -> moduleA.py và thay đổi tất cả các tham chiếu đến moduleA_dev -> moduleA trong mã của bạn.
Tại sao bạn không thể sử dụng các công cụ quản lý mã nguồn thông thường để xây dựng cấu hình mong muốn của mã ổn định và phát triển? Mọi người khác làm điều này trong SVN với các chi nhánh. Và không có lập trình. Tại sao bạn không thể sử dụng các chi nhánh SVN để làm điều này? –
Không thể thấy những gì phân nhánh đã làm với điều này, vì vậy tôi đã làm cho câu hỏi một chút rõ ràng hơn, hy vọng rằng nó sẽ giúp bạn hiểu những gì tôi đang cố gắng để làm. – abyx