使用Anaconda创建python环境的最佳实践工作流程是什么?

时间:2017-01-01 20:40:32

标签: python python-3.x anaconda conda

我正在尝试为数据科学的python开发建立一个标准化的工作流程。我遇到了流行的Anaconda发行版。但是我找不到关于如何设置工作区的好文档。

我在/workspace/aws-scripts

中创建了一个name: aws-scripts dependencies: - python=3.* - boto3 文件,其中包含以下内容
conda env create -f environment.yml -p $PWD

当我创建环境时,

.
├── bin
├── conda-meta
├── environment.yml
├── include
├── lib
├── share
└── ssl

6 directories, 1 file

创建的目录结构是:

~/anaconda3/envs.

git ignore文件是否应该包含所有创建的6个目录?

默认的Anaconda前缀为conda info --envs 当我更改此工作区的前缀时,我不再能将其列为使用

的环境
public class myLocation implements
        GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener,
        ActivityCompat.OnRequestPermissionsResultCallback,
        LocationListener {

    private final static String TAG = "myLocation";
    private final static int MY_PERMISSION_ACCESS_FINE_LOCATION = 1;
    private final static long ONE_SECOND = 1000;
    private final static long UPDATE_INTERVAL = ONE_SECOND;
    private final static long FASTEST_UPDATE_INTERVAL = ONE_SECOND;

    private GoogleApiClient mGoogleApiClient = null;
    Context mParentBase;
    Activity mParentActivity;

    public myLocation(Context Base, Activity activitiyBase) {
        mParentBase = Base;
        mParentActivity = activitiyBase;
        initialLocationService();
    }

    // you call this an interface in your question but I'm just
    //     making it a public method which can be called from Activity
    public void connect()
    {
        mGoogleApiClient.connect();
        Log.d(TAG, "Connection Requested");
    }

    @Override
    public void onConnected(@Nullable Bundle bundle) {

        Log.d(TAG, "OnConnected");

        if (PackageManager.PERMISSION_GRANTED ==
                (ContextCompat.checkSelfPermission(mParentBase,
                android.Manifest.permission.ACCESS_FINE_LOCATION)))

        {
            Log.d(TAG, "Permission Was Granted");
            startLocationUpdates();
        } else {
            ActivityCompat.requestPermissions(mParentActivity,
                    new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSION_ACCESS_FINE_LOCATION);
            Log.d(TAG, "Permission Was Requested");
        }
    }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
        Log.i(TAG, "Connection Failed");
        // just logging for now
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, 
            @NonNull String[] permissions, @NonNull int[] grantResults) {
        // loading from Android Studio, not going to worry about this now
    }

    @Override
    public void onConnectionSuspended(int i) {
        Log.i(TAG, "Connection Suspended");
        // just logging for now, not trying to resolve failure
    }

    @Override
    public void onLocationChanged(Location location) {
        Log.i(TAG, "Entered the onLocationChanged() method");
        // this calls one or the other private methods that don't
        //    matter to your problem.  I can post them if you like.
        if (location != null) {
            showLocationInfo(location);
        } else {
            Log.d(TAG, "Can't get last location");
            setAllUnavailable();
        }
    }

    private void initialLocationService() {
        if (mGoogleApiClient == null) {
            mGoogleApiClient = new GoogleApiClient.Builder(mParentBase)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .addApi(LocationServices.API)
                    .build();
        }
    }

    private void locationRequestUpdates(long interval, long fastestInterval, int priority) {
        // remove any previous updates
        try {
            if(mGoogleApiClient.isConnected()) {
                LocationServices.FusedLocationApi
               .removeLocationUpdates(mGoogleApiClient, this);
            }
        } catch (SecurityException e) {
            logException("SecurityException", e);
        }

        // build a new request
        LocationRequest locationRequest = new LocationRequest()
                .setInterval(interval)
                .setFastestInterval(fastestInterval)
                .setPriority(priority);

        // now send new request
        try {
            if(mGoogleApiClient.isConnected()) {
                LocationServices.FusedLocationApi.requestLocationUpdates(
                        mGoogleApiClient, locationRequest, this);
            }
        } catch (SecurityException e) {
            logException("SecurityException", e);
        }
    }

    private void startLocationUpdates() {
        Location lastLocation = null;
        try {
            lastLocation = LocationServices.FusedLocationApi.getLastLocation(
                    mGoogleApiClient);
        } catch (SecurityException e) {
            logException("SecurityException", e);
        }

        if (lastLocation != null) {
            showLocationInfo(lastLocation);
        } else {
            Log.d(TAG, "Can't get last location");
            setAllUnavailable();
        }

        locationRequestUpdates(UPDATE_INTERVAL,
                FASTEST_UPDATE_INTERVAL,
                LocationRequest.PRIORITY_HIGH_ACCURACY);
    }
}    

感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

Conda环境用于根据Python版本和已安装的库进行隔离设置。有放置您自己的源代码的地方。因此,请将它们保留在默认位置~/anaconda3/envs,并且不要控制此第三方代码。将我们自己的代码放在目录/workspace/aws-scripts中并在那里使用版本控制。您始终可以通过将所有设置导出为yaml文件并使用此文件在其他位置创建新的conda环境来重新创建conda环境。