2014-03-25 110 views
0

我是來自java的python的新手。我創建了一個名爲''Project'的文件夾。在'項目'中,我創建了許多包(如__init__.py文件),如'test1'和'tests2'。 'test1'包含一個Python腳本文件.py,它使用來自'test2'的腳本(從test2導入一個模塊)。我想從命令行在'test1'中運行腳本x.py。我怎樣才能做到這一點?從包中運行腳本

編輯:如果你有我如何能更好地組織我的文件更好的建議,我會感激。 (請注意我的Java心態)

編輯:我需要從一個bash腳本運行腳本,所以我需要提供完整路徑。

+0

如果我理解正確的問題,只是給你的腳本執行權限('/在* NIX系統x.py')或鍵入'蟒蛇x.py'。 – angryfruitsalad

回答

1

有可能有幾種方法來實現你想要的。

有一兩件事,我做的時候,我需要確保模塊路徑中的可執行腳本是正確的是讓父目錄,並在模塊搜索路徑插入(sys.path):

import sys, os 
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.realpath(__file__)))) 

import test1 # next imports go here... 
from test2 import something 
# any import what works from the parent dir will work here 

這樣您可以安全地運行腳本而不必擔心腳本如何被調用。

1

Python代碼被組織成模塊和包。一個模塊只是一個.py文件,其中可以包含類定義,函數定義和變量。包是一個包含__init__.py文件的目錄。

一個標準的Python項目可能是這個樣子:

thingsproject/ 
    README 
    setup.py 
    doc/ 
    ... 
    things/ 
    __init__.py 
    animals.py 
    vegetables.py 
    minerals.py 
    test/ 
    test_animals.py 
    test_vegetables.py 
    test_minerals.py 

的setup.py文件介紹了有關項目的元數據。請參閱Writing the Setup Script,特別是installing scripts的部分。

Entry points存在,以幫助在Python發佈命令行工具。入口點是在setup.py定義是這樣的:

setup(
    name='thingsproject', 
    .... 
    entry_points = { 
     'console_scripts': ['dog = things.animals:dog_main_function'] 
    }, 
    ... 
) 

效果是使用python setup.py install安裝軟件包時,腳本會自動在一些合理的地方根據您的操作系統創建的,如/usr/local/bin。該腳本然後在things包的animals模塊中調用dog_main_function

另一個Python的約定要考慮的是有一個__main__.py file。這表示在一個完整的python代碼的目錄或zip文件中的「主」腳本。這是使用argparse解析器爲命令行參數定義代碼的命令行界面的好地方。

良好的和最新的最新的Python打包的有點混亂世界的信息可以在Python Packaging User Guide找到。

+0

+1這是關於我閱讀該包裝用戶指南的時間。 =) – elias