2012-07-12 26 views
7

Tôi đã tìm kiếm trang này từ đầu đến cuối nhưng chưa tìm được cách nào để thực sự hoàn thành những gì tôi muốn trong Python3x. Đây là một ứng dụng đồ chơi đơn giản vì vậy tôi nghĩ rằng tôi có thể viết một số trường hợp thử nghiệm đơn giản trong khẳng định và gọi nó là một ngày. Nó tạo ra các báo cáo và vì vậy tôi muốn chắc chắn rằng mã của tôi không làm bất cứ điều gì đáng kinh ngạc khi thay đổi.Nhập thư mục gốc cho các bài kiểm tra ngắn gọn

cấu trúc thư mục hiện tại của tôi là: (chỉ bao gồm bộ phận liên quan)

project 
    -model 
    __init__.py 
    my_file.py 
    -test 
     my_file_test.py 

Tôi gặp một địa ngục của một thời gian nhận được my_file_test.py nhập my_file.py.

Như tôi đã nói. Tôi đã tìm kiếm trang này từ trên xuống dưới và không có giải pháp nào có hiệu quả. phiên bản của tôi về Python là 3.2.3 chạy trên Fedora 17.

nỗ lực Trước đây thử: https://stackoverflow.com/questions/5078590/dynamic-imports-relative-imports-in-python-3 Importing modules from parent folder Can anyone explain python's relative imports? How to accomplish relative import in python

Trong hầu như tất cả nỗ lực tôi nhận được một lỗi để ảnh hưởng của:

ImportError: Không có mô-đun nào có tên * HOẶC Giá trị lỗi: Nhập tương đối cố định trong gói không

Điều gì đang xảy ra ở đây. Tôi đã thử mọi câu trả lời được chấp nhận trên SO cũng như trên tất cả các interwebs. Không làm bất cứ điều gì mà ưa thích ở đây nhưng là một lập trình viên .NET/Java/Ruby, điều này chứng tỏ là định nghĩa tuyệt đối về tính trực giác.

EDIT: Nếu vấn đề tôi đã cố gắng tải các lớp mà tôi đang cố gắng để nhập khẩu trong REPL và tôi nhận được như sau:

>>> import datafileclass 
>>> datafileclass.methods 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
>>> x = datafileclass('sample_data/sample_input.csv') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'module' object is not callable 

Nếu vấn đề ... Tôi biết các chức năng trong các công trình lớp học nhưng tôi không thể nhập nó mà hiện tại đang gây ra sự bất lực để kiểm tra. Trong tương lai chắc chắn sẽ gây ra vấn đề hội nhập. (tên được thay đổi để bảo vệ người vô tội) nhận được trong vòng vài tuần chức năng mong muốn cho việc lặp lại thư viện này ... mọi trợ giúp đều hữu ích. Sẽ thực hiện nó trong Ruby nhưng khách hàng muốn Python như một kinh nghiệm học tập,

Trả lời

6

Cấu trúc mã của bạn như thế này:

project 
    -model 
    __init__.py 
    my_file.py 
    -tests 
    __init__.py 
    test_my_file.py 

Quan trọng hơn, thư mục của bạn tests cũng phải là một thư mục module (có một sản phẩm nào __init__.py trong đó).

Sau đó, trong test_my_file.py hãy sử dụng from model import my_file và từ thư mục trên cùng chạy python -m tests.test_my_file. Đây là cách gọi test_my_file làm mô-đun, điều này dẫn đến việc Python thiết lập đường dẫn nhập của nó để bao gồm cấp cao nhất của bạn.

Thậm chí tốt hơn, bạn có thể sử dụng pytest hoặc mũi và chạy py.test sẽ tự động nhận các thử nghiệm.

Tôi nhận thấy điều này không trả lời câu hỏi của bạn, nhưng sẽ dễ dàng hơn nhiều khi bạn làm việc với các thực hành chuẩn Python hơn là chống lại chúng. Điều đó có nghĩa là cơ cấu dự án của bạn với các bài kiểm tra trong thư mục cấp cao nhất của riêng họ.

+0

Cảm ơn. Tôi sẽ thử nó tối nay.Đó là tương tự như cấu trúc ban đầu của tôi nhưng tôi vấp phải một số tài nguyên mà nói rằng tôi nên cấu trúc nó theo cách này. Tôi sẽ cho bạn biết làm thế nào nó hoạt động ra một khi tôi ra khỏi công việc. – Rig

+1

Điều này gây ra một lỗi "ImportError: No module named model" tại dòng 1 (câu lệnh import). Có chuyện gì với bức ảnh này. – Rig

+0

Có một số loại chú thích rõ ràng tôi cần trong lớp học của mình để làm cho nó có thể nhập được không? Không thực sự thành thạo trong python và nó được một thời gian kể từ khi tôi thậm chí còn sử dụng nó (mà chỉ là trong một khả năng giảng dạy sau đó). – Rig

Các vấn đề liên quan